2016-01-23 58 views
0

Angular docs on scope状态:

以$结束申请,角执行对根范围,然后在所有子范围传播的$消化周期。在$ 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范围内运行它,它的后代?

+1

因为角度不可能知道你在做什么你的功能。如果它改为'$ rootScope.aValue + = 1'会怎么样?如果它修改了由根作用域或其他作用域引用的对象的状态,该怎么办? –

+0

,因为从$ rootScope开始启动很容易? – YOU

+0

@JBNizet:我想我明白了。我没有注意到的是AngularJS无法知道任何函数体内发生了什么,不管它是一个控制器主体还是第三方代码。它永远无法检测哪些范围值被修改。顺便说一句,你可以发表你的评论作为答案,我会接受它。 –

回答

1

因为角度无法知道你在做什么你的功能。可以改为$rootScope.aValue += 1。或者它可以修改由根作用域或任何其他作用域引用的对象的状态。

相关问题