Angular - 递增值会产生摘要错误

时间:2016-07-01 21:06:30

标签: angularjs angularjs-scope ng-repeat digest angularjs-infdig

我知道我遇到的问题,但我无法找到解决方法。无论我做什么,我都会得到一个摘要错误。 我认为问题是在ng-repeat中调用“getPlayerIcon”方法。

HTML:

 <div class="col-md-2" ng-repeat="player in team.players">
   <img class="card-img-player" ng-src="/{{player.position}}/{{getPlayerIcon(player.position)}}" data-holder-rendered="true" style="height: 270px; width: 100%; display: block;">
 </div>

AngularJS:

$scope.getPlayerIcon = function(position) {
 if ($scope[position] === undefined)
   $parse(position).assign($scope, 1);

$scope[position]++;
return $scope[position];
}

“玩家”包含一个“位置”字段,可以是后卫或攻击者。 'getPlayerIcon'方法将位置作为参数,然后创建一个具有该位置名称的范围变量,如果它是第一个位于该位置的值,则值为1;如果是该位置,则递增它那个位置。

我遇到的问题是,在ng-src中调用一个方法会在每次在ng-repeat中调用时更改值,这会导致臭名昭着的indig摘要错误:

angular.js:68 Uncaught Error: [$rootScope:infdig] 10 $digest - `iterations reached. Aborting!`

我该如何解决这个问题?我必须增加,因为,例如,如果team.players中有4名防守者和4名攻击者,我希望能够使用Defender / 1,Defender / 2,Defender / 3,Defender / 4,Attacker /加载图像1,攻击者/ 2,攻击者/ 3,攻击者/ 4。基本上我需要它来识别位置,并计算该位置以获得正确的图像。

帮助!

谢谢, FYP

1 个答案:

答案 0 :(得分:1)

只需使用$index

 <div class="col-md-2" ng-repeat="player in team.players track by $index">
   <img class="card-img-player" ng-src="/{{player.position}}/{{getPlayerIcon(player.position, $index)}}" data-holder-rendered="true" style="height: 270px; width: 100%; display: block;">
 </div>

这将为您提供循环中当前迭代的索引,然后不需要在您的方法中进行增量(您可以传入$ index值并向其中添加一个)。