gpt4 book ai didi

angularjs - 从 Controller $scope 发出的事件 $ 并不总是到达 $rootScope 中定义的监听器

转载 作者:行者123 更新时间:2023-12-01 03:51:15 26 4
gpt4 key购买 nike

在我们的应用程序中,有几个对后端的异步调用可能需要一些时间,我们使用一个“沙漏”指示器来显示应用程序很忙(在那些情况下,当用户在运行时不允许戳 UI)未处理调用)。这是通过从主动 Controller 发出事件来完成的,这些事件使后端调用 $rootScope它监听这些事件并引发或清除控制进度指示器显示的标志。

我在 JSFiddle 中做了一个简化版本:
http://jsfiddle.net/e3vZY/

现在,在一种特殊情况下,当应用程序中连续两次执行相同的一系列操作时,第二次指示器会无限期地停留在屏幕上,阻止所有用户操作。第一次它按预期工作,就像在许多其他地方一样,同样的方法似乎总是有效。

似乎在那些麻烦的情况下,事件成功发出 - 我通过将本地监听器放在同一个 $scope 中得出的结论。作为事件从哪里发出(在 fiddle 中,有一个控制台日志记录调用来显示这一点) - 但它永远不会到达 $rootScope 中的监听器.在实际实现中,其他地方没有事件的监听器,因此我们的代码不会在任何级别上明确结束传播。

我正在谈论的一系列操作包括对后端的多次调用、多次显示和隐藏指标、在 ng-view 中切换选项卡。等等。不幸的是,我无法在 fiddle 中重现这个问题,所以这个问题更像是理论上的......

什么可能导致事件无法传播到 $rootScope ?

由于该问题仅在第二次发生,因此采取完全相同的操作并在第一次完美运行,我想它可能与时间问题或其他问题有关。

编辑:

我试着把 $emit调用内部 $timeout (没有延迟)以防会影响时间但行为保持完全相同。

最佳答案

我猜您在简化 jsFiddle 中的代码时已经设法解决了问题,因此您没有向我们展示的代码中可能存在错误。这可能不是 Angular 中的错误。如果你看$emit()的来源在 angular.js 中,没有任何迹象表明它可能会错过调用附加到根作用域的监听器。

也许您可以在 $emit() 中添加一些调试代码在 angular.js 中获取有关正在发生的事情的更多详细信息?

编辑

该错误在评论中进行了解释。

关于angularjs - 从 Controller $scope 发出的事件 $ 并不总是到达 $rootScope 中定义的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22527558/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com