我有一个异步调用,它在$scope
上更改了一个值。完成后,我看不到我的视图已更新,但如果我追加$scope.digest()
,我会看到视图更新。 e.g。
// a doesn't update in view
$rootScope.$on('some_event', function() {
$scope.a = true;
});
// a does update in view
$rootScope.$on('some_event', function() {
$scope.a = true;
$scope.$digest();
});
根据http://www.sitepoint.com/understanding-angulars-apply-digest/ $digest
周期重复,直到$scope
已经确定(至少两次)。
为什么我不会看到此更新?
谢谢!
答案 0 :(得分:1)
通过$emit
或$broadcast
函数调度事件调用不要启动摘要周期本身。因此,如果您从异步代码(例如window.setTimeout
或某些第三方库)调度了事件,则必须在事件处理程序中使用$scope.$apply
或在触发事件的代码中使用$scope.$digest
。