gpt4 book ai didi

javascript - 为什么在 $rootScope.$on 中需要 $rootScope.$apply?

转载 作者:行者123 更新时间:2023-11-29 10:33:34 27 4
gpt4 key购买 nike

为什么在此示例中需要 $rootScope.$apply() 来使用页面上的 ng-hide 更新元素?

根据我的经验,每当我将 $scope.$apply() 放入 $scope.$watch 中时,我都会收到“摘要已在进行中”错误。这有什么不同吗?

app.component('myComponent', {
controller: function(){
$scope.visible = false;

$rootScope.$on('someEvent', function(){
$scope.visible = true;
$rootScope.$apply(); // why?
});
}
});

最佳答案

$rootScope.$on 注册的回调由 $rootScope.$broadcast 触发或 $rootScope.$emit .如果您浏览这些方法的源代码,您会发现这些方法本身不会触发 $digest 循环(脏检查)。这意味着,$digest 应该由调用 $broadcast$emit 的代码触发,或者在使用 注册的回调中触发>$rootScope.$on.

通常,最好假设回调是在 $digest 循环中触发的,这意味着回调调用应该用 $apply 包装,如:

$rootScope.$apply($rootScope.$broadcast('event', data));

这与 Angular 最佳实践是一致的 suggest :

$scope.$apply() should occur as close to the async event binding as possible.

关于javascript - 为什么在 $rootScope.$on 中需要 $rootScope.$apply?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40733987/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com