0

ng-repeat在我看来,我有以下几点:

<div ng-repeat="field in fields">
  {{field.someValue}}
</div>

的内容fields需要在将preprocessed其提供给视图之前。所以在我的控制器中,我有一个函数循环遍历fields对象并添加一些键并删除一些键。简化的伪代码看起来像这样

myApp.controller('FieldsController', function($scope) {
  $scope.fields = loadFieldsFromResource();
  var i=0;

 for(i = 0; i < $scope.fields.length; i++) {
   if ($scope.fields[i].someProperty > maxValue) {
     // Remove an item from the array
     $scope.fields.splice(i,1);
   } 
   else if ($scope.fields[i].someProperty < minValue) {
     // Add an item to the array
     $scope.fields.splice(i,0,createNewField());
   }
 }
})

现在这产生了正确的输出,但给了我10 $digest() iterations reached.错误。我怎样才能让它工作?(我只需要在 init 上完成预处理)。

我试图将fieldswith复制angular.copy()到一个临时变量。对其进行预处理,然后将其分配给fields变量,但仍然出现相同的错误。

preprocessing在我把它交给视图之前,有没有办法在 Angular 手表之外做这种事情?

4

1 回答 1

0

你可以使用 ng-init 吗?

<div ng-init="processFields()" ng-repeat="field in fields">
  {{field.someValue}}
</div>

然后在您的控制器中,您可以执行以下操作:

myApp.controller('FieldsController', function ($scope) {
    $scope.fields = [];

    $scope.processFields = function () {
        var fields = loadFieldsFromResource();
        var i = 0;

        for (i = 0; i < fields.length; i++) {
            if (fields[i].someProperty > maxValue) {
                // Remove an item from the array
                fields.splice(i, 1);
            }
            else if (fields[i].someProperty < minValue) {
                // Add an item to the array
                fields.splice(i, 0, createNewField());
            }
        }

        $scope.fields = fields;
    }
})

我不知道你的全部情况,但我很少有地方需要在展示之前加载和分类。

于 2013-09-11T03:11:42.917 回答