AngularJS - 等待$$阶段变为null

时间:2014-06-21 00:44:55

标签: angularjs

在我的指令中,我进行API调用,获取数据并进行渲染。渲染正在发生时(即$digest正在运行),我想等待然后再做一些事情。

这是我的实现,但不起作用:

// Assume I'm in the callback function of the $resource
function(response) {
   // $scope.templates now needs to render
   $scope.templates = (_.isEmpty(response.warning)) ? response.data : [];

   var s = $scope.$watch('$$phase', function(v) {
       if (_.isNull(v)) {
          NowRunMyNextAwesomeAction()
          // Silent the $watch
          s();
       }
   });
}

console.log(v)位于$watch内时,它会记录$diget,然后再记录其他内容。为什么?我认为可能会发生其他事情,因此我尝试在1秒后使用$$phase记录$timeout,并显示null。所以它肯定没有运行

1 个答案:

答案 0 :(得分:0)

所以,我发现了“一个”解决方案;我不知道这种良好做法是否合适,但它依赖于使用$timeout。我的印象是不建议在Javascript中使用计时器?

无论如何,这是如何做到的:

// Assume I'm in the callback function of the $resource
function(response) {
   // $scope.templates now needs to render
   $scope.templates = (_.isEmpty(response.warning)) ? response.data : [];

   $timeout(function(){
       NowRunMyNextAwesomeAction();
   });
}

请注意$timeout的延迟为零。有关详情,请see here