【发布时间】:2014-08-05 08:00:13
【问题描述】:
假设以下 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 已经“知道” test2 通过迭代 var1,所以该值保持为 2。
注意:请不要给出建议更改 JSON 结构或类似内容的答案 - 因为我站在我这边无法做到这一点。我已经尝试复制此处建议的对象:angularjs - ngRepeat with ngInit - ngRepeat doesn't refresh rendered value - 但这不起作用。我认为这是因为 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 演示中,“更改”按钮将迭代的分配更改为 var2,“更改回”将其更改回 var1)。
【问题讨论】:
标签: javascript angularjs angularjs-ng-repeat angularjs-ng-init