假设this.model === $scope.model
。
以下内容将触发摘要:
$scope.model.property1.property2 = true;
但这不会没有手表:
this.model.property1.property2 = true;
AngularJS如何区分这两行代码?
答案 0 :(得分:1)
我会尽力回答这个问题。没有任何东西可以导致这些行中的任何一个消化:
$scope.model.property1.property2 = true;
this.model.property1.property2 = true;
这两个都是简单的任务。摘要由显式调用它的代码触发。这通常通过$ scope。$ eval(),$ scope。$ apply()和显式$ scope。$ digest()调用来实现。例如,ng-click绑定到元素click事件,并使用附加到该指令的函数调用$ scope。$ apply()。
$ digest循环首先执行表达式以在作用域的asyncQueue上进行求值(例如,由$ scope。$ evalAsync()填充)。接下来,它遍历范围并评估需要触发的监视,并调用分配给它们的相应函数(如果发现更改)。
所以有几点要记得与你的问题有关:
jsfiddle从高层次上证明了这一点。请注意,$ scope.model.property1.property2或this.model.property1.property2上没有明确的监视。视图已更新,因为两个分配都在单独的ng-clicks中发生,这会触发$ digest循环。视图中的{{model.property1.property2}}会设置一个关于此值的监视,当$ digest发生时,会通过每次ng-click更新。
如果没有看到发生实际差异的代码示例,我不能说为什么一个行为与另一个行为不同。