$ locationChangeStart,$ routeChangeStart和$ stateChangeStart之间的区别

时间:2014-11-06 12:38:30

标签: angularjs

我想知道这三者的区别在于它们对应的$locationChangeSuccess$routeChangeSuccess$stateChangeSuccess

2 个答案:

答案 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更改可能会导致您的更改失败。