我目前面临无限的摘要循环错误,我需要一些帮助/建议。
所以我已经阅读了the docs以及StackOverflow上的帖子,我想我理解这个问题 - 如果有人也可以确认 - 这主要是因为$scope
中的某些内容正在改变很多次。
假设我上面所理解的是正确的 - 我不确定如何解决这个问题,我们将不胜感激。
我的代码如下:
HTML Side
<ul class="no-bullet" ng-repeat=“person in persons”>
<li>
<div class="progressBar" ng-style="{background: styleBuilder(person.options)}"></div>
</li>
</ul>
在我的控制器中
(对于上下文:personsArray
是从HTML端传递的内容,而for循环用于将包含数字的数组更新为百分比,因此['classA: 8', 'classB: 2']
变为['classA: 75', 'classB: 25']
(我已经测试了这个并且它有效)
$scope.styleBuilder = function (optionsArray){
for (var index in personsArray){
proportion = parseInt(personsArray[index].split(':')[1])/sumOfAllValues;
if (isNaN(proportion) ){
proportion = 0;
}
personsArray[index] = personsArray[index].substring(0, personsArray[index].indexOf(':'));
personsArray[index] = personsArray[index] + ' : ' + proportion*100;
}
}
感谢。
答案 0 :(得分:2)
问题在于这一行(在@Raulucco解释的摘要周期中):
ng-style="{background: styleBuilder(person.options)}"
尝试ng-init:
<li ng-init="bg = styleBuilder(person.options)">
<div class="progressBar" ng-style="{background: bg}"></div>
</li>
答案 1 :(得分:1)
问题是您在循环遍历数组的同时更改了数组中的元素。 Angular将监视绑定到每个选项属性,因为您正在访问循环内的属性,您更改它会触发摘要循环。 要避免在此示例中,请不要更改options属性,只需返回新样式或循环遍历数组,并在将选项分配给$ scope之前更改选项。