当$scope.$watchCollection
用于更改对象中的属性时,它仅评估第一级属性。调用$scope.$watchCollection
时,是否有一种方法可以迫使角度评估第二级或更低的水平?
最佳答案
您要查找的是$scope.$watch(watchExpression, listener, [objectEquality]);
第三个参数“ objectEquality”为true
在每次调用$digest()
时都会调用watchExpression,并且应返回将被监视的值。 (由于$digest()
在重新运行时
检测到watchExpression可以每次执行多次的更改
$digest()
,并且应该是幂等的。)
仅当当前watchExpression
的值与上一次对watchExpression
的调用的值不相等时,才调用侦听器
(初次运行除外,请参见下文)。不平等是
根据参考不等式确定,通过严格比较
!==
Javascript运算符,除非objectEquality == true
(请参阅下一个
点)
当objectEquality == true
时,根据watchExpression
函数确定angular.equals
的不等式。节省价值
对于对象以供以后比较,使用angular.copy
函数。
因此,这意味着观看复杂物体会产生不利影响
内存和性能的影响。值班听众可能会更改
模型,可能会触发其他听众开火。这是通过实现
重新运行观察程序,直到未检测到任何更改。重播
迭代限制为10,以防止无限循环死锁。
https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$watch