在视图中的循环中执行循环:
<tr ng-repeat="result in results">
<td>
<span ng-repeat="device in helpers.getIosDevices(result.ios_device)">
{{ device.code }}
</span>
</td>
</tr>
控制器:
$scope.helpers = CRM.helpers;
帮助者:
var CRM = CRM || {};
CRM.helpers = {
// Handle "111" value format
getIosDevices: function (devices) {
var obj = [];
if (devices !== null && devices !== undefined) {
if (devices.charAt(0) === '1') {
obj.push({
code: 'ipod',
name: 'iPod',
});
}
if (devices.charAt(1) === '1') {
obj.push({
code: 'ipad',
name: 'iPad',
});
}
if (devices.charAt(2) === '1') {
obj.push({
code: 'iphone',
name: 'iPhone',
});
}
}
return obj;
}
};
出现此错误:https://docs.angularjs.org/error/ $ rootScope / infdig?p0 = 10&amp; p1 =%5B%5B%22fn:%E2%80%A620%20%20%7D;%20newVal:%20undefined;% 20oldVal:%20undefined%22%5D%5D
据我所知,但我不知道如何解决这个问题。我应该使用哪种解决方法?
答案 0 :(得分:1)
在摘要周期中尝试更改ng-repeat
指令中的源列表时出现此错误的原因。
<span ng-repeat="device in helpers.getIosDevices(result.ios_device)">
^^^^^^^^
在obj.push(/* ... */)
中和getIosDevices
首先,当摘要周期停止循环时,我们需要问自己:当Angular检测到在几次迭代中列表没有改变时,它将停止。在您的情况下,每次ng-repeat
调用getIosDevices
方法时 - 列表会获得不同的项目,因此它会再次循环,直到您获得限制并且Angular会删除此异常。
那么解决方案是什么:
在Angular中,在ngRepeat
中调用方法 getList()是不好的做法。因为开发人员会犯错误。
很明显,在你的情况下,getIosDevices()
列表取决于results
,因此我会在results
上创建一些与修复的对象和一些观察者并编写HTML部分:
<tr ng-repeat="result in results">
<td>
<span ng-repeat="device in devices[result.ios_device]">
{{ device.code }}
</span>
</td>
</tr>
其中devices
代表地图。
这是一些可能对您有帮助的演示:
$scope.results = [{
ios_device: "100"
}, {
ios_device: "010"
}, {
ios_device: "001"
}];
$scope.devices = {
"100": [{
code: 'ipod',
name: 'iPod1',
},
{
code: 'ipod',
name: 'iPod2',
}],
"010": [{
code: 'ipod',
name: 'iPod1',
},
{
code: 'ipad',
name: 'iPad2',
}],
"001": [{
code: 'ipod',
name: 'iPod1',
},
{
code: 'iphone',
name: 'iphone2',
}],
}
HTML 的
<table>
<tr ng-repeat="result in results">
<td><span ng-repeat="device in devices[result.ios_device]">
{{ device.code }}
</span>
</td>
</tr>
</table>
中的演示 Fiddle