达到10 $ digest()次迭代。中止!当我添加自定义过滤器

时间:2015-04-20 13:23:14

标签: angularjs angular-filters

我正在制作一个过滤器,因为我有一个数组,其对象具有不同的键组,但它们的值只是相同的。
这是我的自定义过滤器

.filter("transactionFilter", function ($filter) {
return function (data) {

    if (angular.isArray(data)) {
        var result = [];
        angular.forEach(data, function(value , key){
          if(value.type === 'Delivery'){
            result.push({
              "customer_name" : value.customer_id.owner_name,
              "date" : value.delivery_date,
              "total_amount" : value.total_amount,
              "type" : value.type,
              "user" : value.user     
            });
          }else {
            result.push({
              "customer_name" : value.customer_name,
              "date" : value.date,
              "total_amount" : value.total_amount,
              "type" : value.type,
              "user" : value.user    
            });
          }
        });
        console.log(result);
        return result;
    } else {
        return data;
    }
}
});

我在我的视图中应用我的过滤器:

<tr ng-repeat="transaction in transactions | transactionFilter">
  {{transaction}}
</tr>

但是当我应用我的过滤器时,我得到了一个错误 达到10 $ digest()次迭代。中止!

1 个答案:

答案 0 :(得分:-1)

在迭代集合时,您可以在集合中创建新对象......从来都不是一个好的想法。

滤镜应用于过滤,而不是转换模型。

试试这个:

$scope.myTransactions = function () {

    var result = [];
    _.each($scope.transactions, function (transaction) {
        if (angular.isArray(transaction)) {
            angular.forEach(transaction, function (value, key) {
                if (value.type === 'Delivery') {
                    result.push({
                        "customer_name": value.customer_id.owner_name,
                        "date": value.delivery_date,
                        "total_amount": value.total_amount,
                        "type": value.type,
                        "user": value.user
                    });
                } else {
                    result.push({
                        "customer_name": value.customer_name,
                        "date": value.date,
                        "total_amount": value.total_amount,
                        "type": value.type,
                        "user": value.user
                    });
                }
            });
        } else {
            result.push(transaction);
        }
    }
    return result;
};

或者重复使用您的代码:

$scope.myTransactions= $filter('transactionFilter')($scope.transactions);

在您的视图中使用此新模型。

<tr ng-repeat="transaction in myTransactions">
  {{transaction}}
</tr>