在用户操作之后的某个时刻,我想让摘要发生,因此UI反映了支持它的数据模型的变化。
我有一个服务在回调中执行一些更改(异步)。
我理解$scope
仅在控制器的上下文中有意义。我可以通过$apply()
上的$rootScope
来实现相同的效果吗?
我见过检查$$phase
或类似的代码以避免摘要错误,我应该执行哪些检查才能安全地触发摘要?
答案 0 :(得分:8)
请参阅此答案:Running $apply on $rootScope vs any other scope
您可以在控制器外(即在服务中)呼叫$rootScope.$apply()
以触发摘要循环。
或者,您可以考虑使用$broadcast
和$on
在需要更新内容时向您应用的其他部分发送通知。 (见Understanding Angular’s $scope and $rootScope event system $emit, $broadcast and $on)
// in a service
$rootScope.$broadcast('myCustomEvent', {
someProp: 'foobar'
// other data
});
// in a controller or another service
$scope.$on('myCustomEvent', function (event, data) {
console.log(data);
// do something with this event
});