为什么AngularJS总是在根范围上激活$ digest?

时间:2016-01-23 09:21:37

标签: angularjs

Angular docs on scope州:

  

在$ 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范围和它的后代上运行它?

1 个答案:

答案 0 :(得分:1)

因为角度无法知道你在功能中做了什么。

它可以改为$rootScope.aValue += 1。或者它可以修改根作用域或任何其他作用域引用的对象的状态。