簡體   English   中英

帶有$ rootScope變量的ng-init,初始化問題

[英]ng-init with $rootScope variable, initialization issues

我有一個rootcope變量

//we keep it false here, on HTML page if any line item is displayed in edittable form,it will be initialized to True
        $rootScope.varToDecideDispalyofSaveButtonOn10A =false;

我正在嘗試在標記頁面上初始化它

.
.
.
<tr class="BG8" ng-if="(obj.lineItemEditableForPM)" ng-init="varToDecideDispalyofSaveButtonOn10A='true'">   
.
.
.

雖然ng-if這里是真的並且創建了tr,但是變量沒有定義,為什么?

ng-if此指令創建新的子范圍。 這是DOC

因此你可以通過在rootScope中創建一個對象而不是普通變量來實現這一點,然后首先在你的子范圍內搜索something.varToDecideDispalyofSaveButtonOn10A ,並且在找到子范圍內沒有something.varToDecideDispalyofSaveButtonOn10A之后它會搜索到的something.varToDecideDispalyofSaveButtonOn10A在父范圍內。 但如果你使用一個普通的變量(因為你試過沒有對象),angular會知道沒有任何東西叫做varToDecideDispalyofSaveButtonOn10A而沒有在父范圍內搜索它會創建一個名為varToDecideDispalyofSaveButtonOn10A的子范圍變量

<tr class="BG8" ng-if="(obj.lineItemEditableForPM)" ng-init="something.varToDecideDispalyofSaveButtonOn10A=true"> 

在控制器中

$rootScope.something = {};
$rootScope.something.varToDecideDispalyofSaveButtonOn10A =false;

要么

您可以通過使用$parent引用子范圍內的父范圍進行存檔,如下所示

<tr class="BG8" ng-if="(obj.lineItemEditableForPM)" ng-init="$parent.varToDecideDispalyofSaveButtonOn10A=true"> 

要么

你可以在不使用ng-init情況下實現這一點

<tr class="BG8" ng-if="(obj.lineItemEditableForPM ? (varToDecideDispalyofSaveButtonOn10A = true) : false)">

在這種情況下,你會改變的價值varToDecideDispalyofSaveButtonOn10A根據價值obj.lineItemEditableForPM 如果obj.lineItemEditableForPM屬實 ,那么將角為搜索varToDecideDispalyofSaveButtonOn10A在兒童范圍,然后父范圍。 因為你不假設將變量初始化為上述兩種情況。 如果obj.lineItemEditableForPM falseobj.lineItemEditableForPM return false而不更改varToDecideDispalyofSaveButtonOn10A的值。

這是一個Demo Plunker

角度js中常見的陷阱是在范圍中使用原始變量,並嘗試從繼承自它的范圍中更改它(任何范圍都繼承自$ rootScope)。

這不起作用的原因是原始變量不是引用(只有對象和數組是引用),因此,繼承的范圍獲取具有相同名稱的新變量。

因此,只要你想利用范圍繼承,就應該使用一個對象(它總是可以成為一個很好的約定):

$rootScope.SomeVars = { varToDecideDispalyofSaveButtonOn10A : false };

並在視圖中

<tr class="BG8" ng-if="(obj.lineItemEditableForPM)" ng-init="SomeVars.varToDecideDispalyofSaveButtonOn10A='true'">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM