AngularJS:$ watch-in函数导致无限$ digest循环

时间:2015-03-27 16:25:13

标签: angularjs watch

Plunker:http://plnkr.co/edit/HhkypG8I3t7BNv7EPl8q?p=preview

我有许多Filter对象存在于FilterArray中。模板绑定到过滤器内部的状态。 FilterArray的工作是使用state()函数确定所有过滤器的总状态。

angular.module('app', [])

// A filter
.factory('Filter', function() {
  return function(state) {
    return {
      state: state
    };
  };
})

// An array of filters with a state() function
.factory('FilterArray', function(Filter) {
    return function(filters) {
      return {
        filters: filters,
        state: function() {
          return this.filters.map(function(filter) {
            return filter.state;
        });
      }
    };
  }
})

.controller('FilterCtrl', function($scope, Filter, FilterArray) {
  $scope.filterArray = new FilterArray([
    new Filter(true),
    new Filter(false)
  ]);

  $scope.$watch('filterArray.state()', function(data) {
    console.log(data);
  });
})

;

现在,当我尝试$ watch()这个函数时,会出现一个无限的$ digest循环(参见Plunker)。我的想法是,当FilterArray的状态发生变化时,我想广播一个事件。

有关为何发生这种情况的建议以及构建它的正确方法吗?

谢谢!

0 个答案:

没有答案