2013-06-03 58 views
2

只要将集合中的所有对象的IsSelected属性设置为false,就想禁用按钮。

深手表采取行动的集合,当一个属性的变化,我做的:

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

但集合太大(其实我只有两个元素,但这些都是大的对象)的d我跑在'内存不足'的例外。

那么,我该怎么做呢?

[编辑]

以下@boxed建议:

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

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

它仍然是非常缓慢的,我遇到了错误:

  • ERREUR D'执行JavaScript的:10达到$ digest()迭代。中止!
+2

,如果你只是想观看collectionn然后你可以看“messages.length”对象的添加和删除 –

+0

你可以做的影子版本只需要观看物品的物品? – Sharondio

回答

2

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

+0

我试过这个解决方案,但是我得到一个很慢的错误。由于某种原因,用于观看的代码在页面加载期间被无数次触发。我已经更新了我的代码。错误是Erreur d'exécutionJavaScript:达到10 $ digest()迭代。中止! 观察者在最近的5次迭代中触发了:[[],[],[],[],[]] – Sam

+0

无论如何,这听起来像是某种进步:P也许你应该只有事件处理程序用于更改IsSelected相反,在那里你循环的项目。 – boxed

+0

这就是我所做的,但是Angular的方式更像是观察事物的变化,不是吗? – Sam