在我的指令中,我进行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
。所以它肯定没有运行
答案 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。