在$ apply结束时,Angular对根作用域执行$摘要循环,然后在所有子作用域中传播。在$ digest循环期间,检查所有$ watchched表达式或函数的模型变异,如果检测到变异,则调用$ watch监听器。
我想知道为什么每个$应用在根范围上调用$ digest?有时可能无法检测修改了哪个范围,并且仅在该范围及其后代上调用$ digest。
例如,取控制器和视图:
angular.module("aModule")
.controller("aController", function($scope) {
$scope.increase = function() {
$scope.aValue += 1;
};
});
<div ng-controller="aController">
<button ng-click="increase()">Increase</button>
</div>
单击按钮是否真的在根范围上运行$ digest循环?为什么不在aController
范围和它的后代上运行它?
答案 0 :(得分:1)
因为角度无法知道你在功能中做了什么。
它可以改为$rootScope.aValue += 1
。或者它可以修改根作用域或任何其他作用域引用的对象的状态。