0

我正在尝试使用 ng-repeat 填充 div 列表。我还使用了一个有深度的框架(所以我可以浏览列表的元素)。

要设置这个深度,我需要调用getTotalDepths一个函数来检查列表项的当前索引和一个tempIndex值。如果它们不同,则应增加总深度,然后返回该totalDepths值。

我运行它后,出现以下错误(大约 25000 次):

未捕获的错误:[$rootScope:infdig]` http://errors.angularjs.org/1.6.10/$rootScope/infdig ?

HTML:

<div style="display: inline-block;" ng-repeat="item in items">
    <div class="item-list" focusable data-focusable-depth="{{getTotalDepths($index)}}">
        <img class="img-fluid" ng-src="{{item.picture}}" />
    </div>
</div>

控制器:

$scope.totalDepths = -1;
var tempIndex = -1;
var x;

$scope.getTotalDepths = function (index) {
    x = $scope.totalDepths;
    if (tempIndex != index) {
        tempIndex = index;
        x = $scope.totalDepths += 1;
    }
    return x;
}

注意:当我totalDepths在这一行增加时会发生错误:

x = $scope.totalDepths += 1;

任何帮助都深表感谢!

4

1 回答 1

0

在@Slava 的帮助下,我解决了这个问题。

以我的方式调用 getTotalDepths() 是一个很大的错误,因为 Angular 在每个循环中都会调用它,并且函数每次都返回不同的结果。

我通过简单地调用 ng-init 中的函数来修复它,如下所示:

<div style="display: inline-block;" ng-repeat="item in items" ng-init="depth = getTotalDepths($index)">
    <div class="item-list" focusable data-focusable-depth="{{depth}}">
        <img class="img-fluid" ng-src="{{item.picture}}" />
    </div>
</div>
于 2018-05-22T06:43:25.060 回答