0
以$结束申请,角执行对根范围,然后在所有子范围传播的$消化周期。在$ digest循环期间,检查所有$监视的表达式或函数的模型变化,并且如果检测到突变,则调用$ watch监听器。
我想知道为什么每个应用都会在根范围上调用$摘要?有时候不可能检测出哪个范围被修改,只能在该范围内调用$ 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>
请问一下按钮真正运行$消化在根范围内循环?为什么不只在aController
范围内运行它,它的后代?
因为角度不可能知道你在做什么你的功能。如果它改为'$ rootScope.aValue + = 1'会怎么样?如果它修改了由根作用域或其他作用域引用的对象的状态,该怎么办? –
,因为从$ rootScope开始启动很容易? – YOU
@JBNizet:我想我明白了。我没有注意到的是AngularJS无法知道任何函数体内发生了什么,不管它是一个控制器主体还是第三方代码。它永远无法检测哪些范围值被修改。顺便说一句,你可以发表你的评论作为答案,我会接受它。 –