Интересно, какая разница с этими тремя, с их соответствующими $locationChangeSuccess, $routeChangeSuccess и $stateChangeSuccess.
Разница между $locationChangeStart, $routeChangeStart и $stateChangeStart
Ответ 1
$locationChangeStart:
это использует поставщик $location и передает его при каждом изменении URL-адреса. Местоположение больше относится к пути определенного URL-адреса. Это больше похоже на обычный JavaScript, вы можете изменить любой путь в своем приложении, и не имеет значения, определено ли в вашем приложении как маршрут или состояние.
$routeChangeStart:
это использует поставщик $route, и он тот же, он broadcasts, когда маршрут изменяется (по умолчанию Angular маршрутизатор используется с ngRoute). Это используется для связи между контроллерами и представлениями.
$stateChangeStart:
это происходит, когда ваше состояние изменяется, и это транслируется, когда начинается переход. Он используется ui-router, который обеспечивает другую (более продвинутую) реализацию маршрутизатора. Штаты позволяют вам отображать и получать доступ к различной информации о разных состояниях, и вы можете легко передавать информацию между состояниями через $stateParams.
Они очень похожи, на самом деле они имеют одни и те же имена, но основные различия зависят от маршрутизации вашего приложения. Если вы используете маршрутизатор Angular, тогда придерживайтесь маршрутов, однако, если вы используете ui-router, придерживайтесь состояний. Это практические советы, которые я могу вам дать.
Ответ 2
Обратите внимание, что вы можете изменить местоположение без изменения состояния (т.е. URL-адрес изменен, но вы все еще в одном состоянии).
Таким образом, вы можете прослушать $locationChangeStart, даже если вы используете ui-router, если изменение $stateParam может привести к потере ваших изменений, например.