首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$digest()更新父$rootScope

$digest()更新父$rootScope
EN

Stack Overflow用户
提问于 2016-03-15 16:32:59
回答 2查看 103关注 0票数 0

我无法理解$digest是如何工作的。根据Angular $scope.$digest vs $scope.$apply中给出的答案

“$digest()将更新当前作用域和所有子作用域。$apply()将更新每个作用域。因此,大部分时间$digest()都是您想要的,而且效率更高。”

但在我的plnkr中当我这样做时

代码语言:javascript
复制
$rootScope.company = "Google";  

在第二个控制器上调用$digest()时,更改也会在父作用域中更新。我做错什么了吗?

Plnkr:http://plnkr.co/edit/LTBWTWf7hxlfc5niXsGN?p=preview

EN

回答 2

Stack Overflow用户

发布于 2016-03-15 17:17:53

我看过你的代码,我发现它很有趣!首先,我建议您使用超时值,例如:我已经将第二个控制器的超时值更改为1000毫秒,并发现现在使用“Google”的两个公司,第二个和第三个。

但除此之外,我注意到在第三个控制器中,您将初始化封装在一个$apply中,将第三个控制器的代码转换为

代码语言:javascript
复制
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,您可能会遇到不需要的更新,并且您的最终应用程序可能不稳定。

票数 0
EN

Stack Overflow用户

发布于 2016-03-15 17:17:56

  • $apply :

是负责通过在rootScope ($rootScope.$digest())上调用$digest来执行应用程序中所有可用作用域的观察器的完整列表的函数。

这意味着每次我们调用$apply()时,我们都会执行应用程序的一个新的生命周期。

  • $digest :

AngularJS按周期执行,这称为$digest,此$digest负责评估模型和视图之间的更改,并更新UI和模型以使其同步。

如上所述,$apply在rootScope上调用$digest,这意味着它会重新评估所有可用作用域中的所有监视器,这可能会对大型作用域层次结构造成性能影响。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36006068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档