Angularjs 角度控制器中js对象数组上的$watchCollection是否需要匿名函数?

Angularjs 角度控制器中js对象数组上的$watchCollection是否需要匿名函数?,angularjs,angularjs-ng-repeat,angular-ui-router,Angularjs,Angularjs Ng Repeat,Angular Ui Router,我有一个简单的js数组,由angular工厂检索,注入控件,观察,然后在ui路由器管理的视图状态中使用ng repeat显示在表中 最初我尝试使用$watchCollection订阅此阵列 self.$watchCollection( self.Data, function(newData, oldData){ self.total = newData.length; }); 但是,这只是在我最初加载应用程序时运行的。我发现订阅正在运行的集合的唯一方法是使用匿名函数返回有问题的数组 sel

我有一个简单的js数组,由angular工厂检索,注入控件,观察,然后在ui路由器管理的视图状态中使用ng repeat显示在表中

最初我尝试使用$watchCollection订阅此阵列

self.$watchCollection( self.Data, function(newData, oldData){
  self.total = newData.length;
});
但是,这只是在我最初加载应用程序时运行的。我发现订阅正在运行的集合的唯一方法是使用匿名函数返回有问题的数组

self.$watchCollection( function() { return self.Data }, function(newData, oldData){
  self.totalWatchedWithAnonFunc = newData.length;
})
全面审视这一点

从我读到的所有内容来看,要获得有效订阅,我需要做的只是传入数组本身,而不是返回数组的匿名函数

我之所以包含ui路由器,是因为我的实际应用程序大量使用它,我希望尽可能地模拟我的环境,以了解我是如何设置的

我不明白什么?我能做些不同的事情吗


谢谢。

您是在寻找
self.$watchCollection(“数据”),而不是
self.$watchCollection(self.Data,…)
?试试看!请参阅以了解原因:第一个参数是在作用域上求值的字符串,或者是使用作用域的函数返回要查看的内容。

属性名称是字符串吗?!?!我很震惊,这就是解决方案……甚至没有确定范围?这是一个疯狂的新领域…感谢您的快速响应。在AngularJS中,在作用域上计算字符串是一件经常发生的事情,例如
ngRepeat
ngInit
ngInclude
,等等,所有这些都采用在当前作用域上计算的表达式。与其他语言/框架相比,它有点奇怪,但当你习惯了它,它就相当强大了!根据stevuu的建议更新: