[英]AngularJS - reset ngInit in ngRepeat
假設以下JSON結構,這與我目前正在使用的內容大大簡化:
$scope.var1 = {
"test1": {
"name": "test1",
"belongsTo": "var1",
"additionalInformation": "blabla"
},
"test2": {
"name": "test2",
"belongsTo": "var1",
"additionalInformation": "blabla"
},
"test3": {
"name": "test3",
"belongsTo": "var1",
"additionalInformation": "blabla"
}
};
$scope.var2 = {
"test8": {
"name": "test8",
"belongsTo": "var2",
"additionalInformation": "blabla"
},
"test2": {
"name": "test2",
"belongsTo": "var2",
"additionalInformation": "blabla"
},
"test9": {
"name": "test9",
"belongsTo": "var2",
"additionalInformation": "blabla"
}
};
$scope.valuesVar1 = {
"test1": {
"value": 1
},
"test2": {
"value": 2
},
"test3": {
"value": 3
},
};
$scope.valuesVar2 = {
"test8": {
"value": 4
},
"test2": {
"value": 5
},
"test9": {
"value": 6
},
};
Var1和Var2代表一些數據,它們總是具有相同的結構。 對於valuesVar1和valuesVar2也是如此 - 它們具有相同的結構並包含var1和var2的一些附加信息。
我試圖迭代var1並使用ng-init從valuesVar1獲取值。 在用戶交互中,迭代的賦值更改為var2,因此我們知道我們正在迭代var2並從valuesVar2獲取值。
問題 :當迭代var2時,我們應該得到“test2”的值5。 但由於ngInit已經通過迭代var1“知道”test2,因此該值保持為2。
注意 :請不要給出答案,建議更改JSON結構或類似的東西 - 因為我不能做到這一點。 我已經嘗試復制像這里提出的對象: angularjs - ngRepeat with ngInit - ngRepeat不刷新渲染值 - 但這不起作用。 我假設這是因為ngInit“記住”字符串值“test2”而不是對象引用(但我真的不知道:))。
問題 :如何在迭代中再次運行ngInit,其中對象的相同鍵已在前一次迭代中使用過?
我還准備了一個jsfiddle http://jsfiddle.net/S329r/6/ 。 在運行時,它迭代var1並輸出如下值:
test1: 1
test2: 2
test3: 3
到目前為止這么好,我期待這一點。 但是,當為迭代分配var2時,以下顯示:
test2: 2
test8: 4
test9: 6
這里我希望test2顯示值5.(提示:在jsfiddle演示中,按鈕“Change”將迭代的賦值更改為var2
,“Change Back”將其更改回var1
)。
一種解決方案是確保為JSON中的每個項生成唯一的Id。 當然你不能像你說的那樣改變你的JSON,但你可以強制angularJS生成一個。
把它放在你的重復循環中:
iter in iterateOver track by $id(iter.name + iter.belongsTo)
只要數據組合是唯一的,您的循環就能正常工作。
從文檔中獲得更多信息:
例如:項目中的項目按$ id(項目)跟蹤。 內置的$ id()函數可用於為數組中的每個項分配唯一的$$ hashKey屬性。 然后,此屬性用作關聯DOM元素與按標識的數組中相應項的關鍵字。 在數組中移動相同的對象將以相同的方式在DOM中移動DOM元素。
編輯另一個解決方案是稍微改變你的循環而不使用ng-init
而是獲取你的值如下:
<div ng-repeat="iter in iterateOver " >
{{iter.name}}: {{getValForIter(iter).value}}
</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.