【问题标题】:On location change in Angular关于 Angular 中的位置更改
【发布时间】:2013-08-21 22:26:18
【问题描述】:

有没有办法检测 AngularJS 中的全局位置变化,而不仅仅是单个控制器?我的目标是检测每个位置变化。 或者有什么有效的方法来观察 window.location.href 的变化?

$routeChangeSuccess 

据我了解,仅适用于单个控制器还是我错了?

【问题讨论】:

  • 您可以拥有一个包含整个应用程序的基本控制器,并让该控制器监听 routeChangeSuccess 事件。

标签: javascript angularjs location href


【解决方案1】:

首先,$routeChangeSuccess 不限于单个控制器。它是从$rootScope 广播的,这意味着它可以在每个范围(或从$rootScope 继承的每个范围)上被监听,但它是一个应用程序范围的事件。

还有一个与$routeChangeSuccess 类似的未记录事件,称为$locationChangeSuccess。不同之处在于,前者在路由成功更改后触发,后者在 URL 更改但在路由更改之前触发。请注意,这并不是所有的 URL 更改,只是 URL 以 AngularJS 应用程序可以注册的方式更改(例如,对 $location.url() 的 setter 调用)。

澄清一下,$locationChangeSuccess 也是从$rootScope 广播的。

对于两者,您可以使用scope.$on('$routeChangeSuccess')scope.$on('$locationChangeSuccess') 收听事件。

【讨论】:

    【解决方案2】:

    对于使用 Angular-UI-Router 的用户,此事件不会触发。 "$stateChangeSuccess" 是 Angular-UI-Router 的正确事件。有关 UI 路由器事件的更多信息,请参阅此 SO 问题:
    How to trigger UI-Router View Load events?
    还有 API 指南:
    https://github.com/angular-ui/ui-router/wiki#state-change-events

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 2016-07-02
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      相关资源
      最近更新 更多