Javascript AngularJS-持续关注收藏
我正在尝试在我的应用程序中为一个集合构建一个真正的观察者,起初,我认为Angular可以提供我所需要的一切 我的意思是,我有Javascript AngularJS-持续关注收藏,javascript,angularjs,watch,Javascript,Angularjs,Watch,我正在尝试在我的应用程序中为一个集合构建一个真正的观察者,起初,我认为Angular可以提供我所需要的一切 我的意思是,我有$watch,既浅又深。和$watchCollection,一个$digest循环,通过脏检查机制在我的$scope exposed变量上循环,并触发所有的观察者 太好了!我还需要什么 错了 结果表明,$watchCollection仅在被监视变量的第一次更改时被触发… 这就是强大的观察者们的故事。。。为什么 经过一段时间后,我意识到我需要某种可怕的循环来检查这个集合,否则
$watch
,既浅又深。和$watchCollection
,一个$digest
循环,通过脏检查
机制在我的$scope exposed
变量上循环,并触发所有的观察者
太好了!我还需要什么
错了强>
结果表明,$watchCollection
仅在被监视变量的第一次更改时被触发…这就是强大的观察者们的故事。。。为什么 经过一段时间后,我意识到我需要某种可怕的循环来检查这个集合,否则每当var被修改时,我必须实现某种回调来完成这项工作 有人知道如何以最干净的方式做到这一点吗
重要提示:
我不知道为什么,但我的代码中似乎有一些可怕的bug在啃我的脚踝 既然我已经修复了它,那么
$watchCollection(expr,foo)
和$watch(expr,foo,true)
都能正常工作
我被SO帖子误导了,其中一位用户评论:
[…]我在您的代码中没有看到任何发出后续请求(检查新消息)的内容。在哪里发生的
我把他的评论作为我假设的证据。。。我的错
我把这个问题留作纪念如果使用第三个参数(
objectEquality
),我很肯定一个普通的$watch
会做到这一点。这将检查对象是否相等,而不仅仅是引用
因此,您可以使用以下内容:
$scope.$watch('prop', function(value) {
// do something
}, true);
true
值告诉Angular比较对象而不是参照
下面的is with
scope
解决方案有点像黑客解决方案,只有在$watchCollection不起作用时才应该使用。与其关注数组,不如关注json
$scope.$watch(function() {
return angular.toJson($scope.array);
},
function() {
// watch logic
}
我使用上述解决方案在多个阵列上进行监视,如下所示:
$scope.$watch(function() {
return JSON.stringify([$scope.array1, $scope.array2]);
},
function() {
// watch logic
}
您可以使用JSON.stringify或angular.toJson。将true作为第三个参数传递给watch应该可以。。。。作用域。$watch('data',函数(newVal){/*…*/},true);黑客,但可能有它的用途。请看一下我的最新作品。这就是深度监视应该做的事情。请看一下我的更新