$digest() updating parent $rootScope
$digest() updating parent $rootScope
我无法理解$digest是如何工作的。根据 Angular $scope.$digest vs $scope.$apply 中给出的答案
" $digest() 将更新当前作用域和任何子作用域。$apply() 将更新每个范围。所以大多数时候$digest()将是你想要的,更有效"
但是在我的 plnkr 中,当我这样做时
$rootScope.company = "Google";
在第二个控制器上调用 $digest(),更改也会在父作用域中更新。我犯了什么错误吗?
波兰兹罗提 : http://plnkr.co/edit/LTBWTWf7hxlfc5niXsGN?p=preview
了一下你的代码,发现它很有趣!首先,我建议您使用超时值,例如:我将第二个控制器的超时值更改为 1000 毫秒,发现现在两家公司使用"Google",第二个和第三个。
但除此之外,我还注意到在第三个控制器中,您将初始化包装在$apply中,将第三个控制器的代码转换为
app.controller('ThirdCtrl', function($scope, $rootScope) {
$scope.name = 'Third';
setTimeout(function() {
$scope.name = "I'm Third";
$rootScope.company = "Amazon";
$scope.$digest();
},500);
});
绝对为我解决了"错误",因为在第三个控制器中调用的$apply也在更新$rootScope,正常工作! :D
无论如何,对于此解决方案,我不建议您使用$scope而不是$rootScope,您可能会遇到不需要的更新,并且您的最终应用程序可能不稳定。
- $apply :
是负责通过在 rootScope ($rootScope.$digest()) 上调用 $digest 来执行应用程序中所有可用范围的观察程序的整个观察程序列表的函数。
这意味着每次我们调用 $apply() 时,我们都会执行应用程序的新生命周期。
- $digest :
AngularJS以循环执行,称为$digest,此$digest负责评估模型和视图之间的更改,并更新UI和模型以使其同步。
如上所述,$apply调用 rootScope 上的$digest,这意味着它会重新评估所有可用范围内的所有观察程序,这可能会导致大型范围层次结构的性能下降。
- $rootScope未使用forEach进行更新
- $rootScope not working
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 正在$rootScope上达到控制器作用域$在内部控制器上
- 无法在窗口内使用rootScope.通知
- jQuery parent() in table
- 嵌套回调范围和rootScope AngularJS
- AngularJS ng src不会在$rootScope上使用$watch进行更新
- iFrame parent node
- 如何在提供程序的配置中处理$rootScope
- Jasmine,Angular;rootScope$广播“;测验
- Javascript TypeError:$(..)parent不是函数
- 为什么可以't在对指令的html调用中访问$rootScope
- parent和iframe中的Bootstrap.js文件
- 如何使用AngularJS$rootScope
- 如何使AngularJS控制器依赖于通过ajax加载在rootScope上的值
- 如何捕获jqueryDialog和Parent之间的交互
- 如何从DOM(KnockoutJS)中删除$data、$parent等
- 在angular中使用$parent是一种好的做法吗
- $digest() updating parent $rootScope