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