我有一个角度控制器:
app.controller('MyController', function($scope) {
var dao = new MyDao();
var something = dao.getSomething();
$scope.something = something;
// update view
var somethingElse = dao.getSomethingElse();
$scope.somethingElse = somethingElse;
// update view again
});
此控制器通过路由配置绑定到视图。方法getSomething()和getSomethingElse()可能需要几秒钟才能执行,所以我想在每个方法返回数据后立即更新视图。我读到我应该可以通过添加注释所在的$scope.$apply();
来执行此操作,但angular会引发错误:Error: [$rootScope:inprog]
。有人可以解释为什么或提供更好的选择吗?感谢
答案 0 :(得分:1)
您正在尝试触发摘要周期(通过$apply()
),而其中一个已经发生。
您可以使用$timeout()
它会在需要时触发摘要,或者如果一个正在进行中,则会正常继续。
$timeout(function() {
// anything you want can go here and will safely be run on the next digest.
})
在使用$scope.$$phase
之前,您还可以检查$apply()
是否为假(意味着角度不在摘要中间),但这是未经修改的。
if(!$scope.$$phase) {
//$digest or $apply
}
答案 1 :(得分:0)
隐藏您的观点,直到出现类似内容:
<div ng-show="something.length">
{{something}}
</div>
此外,您可以添加加载消息,直到您的某些内容回来:
<div ng-show="loading">Loading something...</div>