10

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

$routeChangeSuccess 

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

4

2 回答 2

24

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

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

只是为了澄清,$locationChangeSuccess也是从广播$rootScope

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

于 2013-08-20T01:23:05.850 回答
1

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

于 2014-12-10T05:13:55.887 回答