[英]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
false , obj.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.