【问题标题】:angular - rootscope broadcast on locationChangeStart not working角度 - locationChangeStart 上的 rootscope 广播不起作用
【发布时间】:2016-01-19 09:14:27
【问题描述】:

我正在 $locationChangeStart 事件上从我的运行函数发送 $rootScope.$broadcast。在我的一个控制器中,我设置了一个侦听器,但它没有收到事件。事件广播是否在页面生命周期中过早?解决办法是什么?

谢谢。

【问题讨论】:

  • 可以是任何东西。最好发布您的代码。
  • 您的监听器是在控制器中被新状态还是旧状态激活?如果它处于新状态的控制器中,您的广播可能会在新控制器开始侦听之前发送,我猜......
  • 旧状态和新状态是什么意思?我可以肯定地看到这是事件触发过早引起的问题,因为当我使用 setTimeout 将事件的广播延迟 1 秒时,侦听器会接收到事件。但我不想设置一些任意延迟,我想确保我的听众准备好了。有办法吗?
  • 控制器需要从你的运行函数中得到什么信息?
  • 你让它工作了吗?

标签: angularjs


【解决方案1】:

假设您有以下路线:

  1. 路线: /#/first,视图: first.html,控制器: first-ctrl.js
  2. 路线: /#/second,视图: second.html,控制器: second-ctrl.js

现在假设您在第一个视图上有一个按钮,该按钮将您的应用重定向到第二个路由,您的第二个视图与您的第二个控制器启动。在第二个控制器内,您的侦听器试图捕获您的广播事件。

因此,在您单击按钮后,会触发 $locationChangeStart 并且您的应用会发送广播。但是广播发生在 url 更改和第二个控制器被激活之前。

您使用 setTimeout 的解决方法有效,因为在延迟之后 url 已经更改,并且在您发送广播之前激活了第二个控制器。

我不确切知道您尝试对该广播做什么,但也许您可以尝试使用$locationChangeSuccess 代替?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    相关资源
    最近更新 更多