Javascript AngularJS在$scope.emit之后执行操作

Javascript AngularJS在$scope.emit之后执行操作,javascript,angularjs,Javascript,Angularjs,在对$scope.emit(…)的调用完成处理(即所有处理程序/侦听器都已完成)后,我需要执行一个操作,如何执行该操作 $scope.$emit("nsError:setPage", { page: page, ele: ele });// tell page directive to set the current page so that the errored item is visible alert('he

在对$scope.emit(…)的调用完成处理(即所有处理程序/侦听器都已完成)后,我需要执行一个操作,如何执行该操作

                    $scope.$emit("nsError:setPage", { page: page, ele: ele });// tell page directive to set the current page so that the errored item is visible
                    alert('here');

当前,警报发生在UI更新到正确页面之前。

$scope.$emit
已完成”与“UI已更新”不同。要更新UI,摘要周期必须完成。您可以使用angular的
$timeout
功能等待发生这种情况(不要忘记将其插入控制器):

如果发出事件:

 $scope.$emit("nsError:setPage", { page: page, ele: ele })
然后你可以听它:

$scope.$on('nsError:setPage', function(event, mass) { alert('here'); });
请记住,
$emit
通过作用域层次结构向上调度事件,
$broadcast
向下调度子作用域


更多官方信息(滚动至$on)

感谢您的关注,GuyT,这是用于消费已发出事件(不是我提到的事后)。谢谢,这就成功了。这是处理这些事情的“正确”方法吗?(我突然想到,如果摘要周期由于某种原因花费了很长时间,那么使用超时是否会导致计时问题?)$超时是Angular提供的服务。它包装$apply,包装$digest。基本上,fikkatra提供的代码可以确保Angular在代码准备好后调用它。我试图在这里解释一下:这里没有传递延迟,我们只是使用默认延迟0。本质上,它所做的是将警报添加到执行队列的末尾,而不是立即对其进行处理。这使浏览器有时间执行其他一些事情,比如更新DOM。你对这是正确的解决方案有一些怀疑是对的。闻起来确实很好笑。这是否是一种处理东西的好方法,取决于您的具体情况,但有时只需要在DOM更新后执行代码,在这种情况下,这就是方法。精彩的解释(你们两位),非常感谢+1“闻起来确实很好笑”,完美地捕捉了这种情绪:-)谢谢你的回答,请参阅上面对GuyT的评论-我相信这也适用于你的答案。是的,似乎我误解了你的问题无需担心-按照你给出的链接解释了fikkatra的答案,该答案给了你+1分。:)
$scope.$on('nsError:setPage', function(event, mass) { alert('here'); });