根据需要更新angularjs视图

时间:2014-07-22 17:36:50

标签: angularjs view updatemodel

我有一个角度控制器:

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]。有人可以解释为什么或提供更好的选择吗?感谢

2 个答案:

答案 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>