angularjs:$ watch on a collection触发'内存不足'异常

时间:2013-06-03 13:54:37

标签: angularjs

我希望只要集合中所有对象的属性IsSelected设置为false,就会禁用一个按钮。

要深入观察集合,以便在属性发生变化时采取行动,我会这样做:

$scope.$watch('messages', function (i) {
       //do something
}, true);

但是这个集合太大了(实际上我只有两个元素,但这些都是大对象)而且我运行的是“内存不足”异常。

那么,我该怎么做呢?

[编辑]

关注@boxed建议:

        $scope.$watch(function () {
            return $($scope.messages).map(function () {
                return this.IsSelected;
            });

        }, function (e) {
            //do something
        });

它仍然很慢,我遇到了错误:

  • Erreurd'exécutionJavaScript:10 $ digest()迭代达成。中止!

2 个答案:

答案 0 :(得分:2)

$ watch的第一个参数可以是一个函数。在该函数中,您可以返回所有项目的所有IsSelected属性的列表。

答案 1 :(得分:0)

您可以增加摘要限制 https://docs.angularjs.org/api/ng/provider/ $ rootScopeProvider

        $rootScopeProvider.digestTtl(25);