我想知道这三者的区别在于它们对应的$locationChangeSuccess
,$routeChangeSuccess
和$stateChangeSuccess
。
答案 0 :(得分:37)
<强> $ locationChangeStart:强>
这会使用$location
提供程序并在URL更改时进行广播。位置更多地指特定URL的路径。它更像是纯JavaScript,您可以更改为应用程序中的任何路径,如果它在您的应用程序中定义为路由或状态,则无关紧要。
<强> $ routeChangeStart:强>
这使用$route
提供程序,它是相同的,当路由更改时它是broadcasts
(与ngRoute
一起使用的默认Angular路由器)。这用于在控制器和视图之间建立链接。
<强> $ stateChangeStart:强>
它会在您的状态发生变化时发生,并在转换开始时进行广播。它由ui-router使用,它提供了routeprovider的不同(更高级)实现。 States允许您映射和访问有关不同状态的不同信息,您可以通过$stateParams
轻松地在州之间传递信息。
它们非常相似,实际上它们具有相同的名称,但主要区别取决于应用程序使用的路由。如果您使用角度路由器然后坚持路由,但是,如果您使用ui-router,请坚持使用状态。这是我可以给你的实用建议。
答案 1 :(得分:6)
请注意,您可以在不更改状态的情况下更改位置(即URL已更改,但您仍处于相同状态)。
因此,即使您使用ui-router,也可能希望收听$locationChangeStart
,例如,$stateParam
更改可能会导致您的更改失败。