有没有办法检测 AngularJS 中的全局位置变化,而不仅仅是单个控制器?我的目标是检测每个位置变化。或者有什么有效的方法来观察 window.location.href 的变化?
$routeChangeSuccess
据我了解,仅适用于单个控制器,还是我错了?
有没有办法检测 AngularJS 中的全局位置变化,而不仅仅是单个控制器?我的目标是检测每个位置变化。或者有什么有效的方法来观察 window.location.href 的变化?
$routeChangeSuccess
据我了解,仅适用于单个控制器,还是我错了?
首先,$routeChangeSuccess
不限于单个控制器。它是从 广播的,$rootScope
这意味着它可以在每个范围(或从 继承的每个范围$rootScope
)上被收听,但它是一个应用程序范围的事件。
还有一个未记录的事件,其工作方式类似于$routeChangeSuccess
called $locationChangeSuccess
。不同之处在于,前者在路由成功更改后触发,后者在 URL 更改但在路由更改之前触发。请注意,这并不是所有的 URL 更改,只是 URL 以 AngularJS 应用程序可以注册的方式更改(例如,对 的 setter 调用$location.url()
)。
只是为了澄清,$locationChangeSuccess
也是从广播$rootScope
。
scope.$on('$routeChangeSuccess')
对于这两者,您可以使用或收听事件scope.$on('$locationChangeSuccess')
。
对于那些使用 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