簡體   English   中英

AngularJS - 在ngRepeat中重置ngInit

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

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