В AngularJS я иногда вижу $state.transitionTo(), а иногда мы используем $state.go(). Может ли кто-нибудь сказать мне, как они отличаются друг от друга и когда нужно использовать друг друга?
Разница между $state.transitionTo() и $state.go() в Angular ui-router
Ответ 1
Вы имеете в виду AngularUI Router? Если это так, wiki указывает различия:
$state.go(to [, toParams] [, options])
Возвращает Promise, представляющий состояние перехода.
Удобный метод перехода в новое состояние.
$state.goвызывает$state.transitionToвнутренне, но автоматически устанавливает параметры{ location: true, inherit: true, relative: $state.$current, notify: true }. Это позволяет вам легко использовать абсолютный или относительный путь и указывать только параметры, которые вы хотите обновить (при этом не заданные параметры наследуются от текущего состояния).$state.transitionTo(to, toParams [, options])
Возвращает Promise, представляющий состояние перехода.
Низкоуровневый метод перехода в новое состояние.
$state.go()используетtransitionToвнутренне.$state.go()рекомендуется в большинстве случаев.
Ответ 2
$state.transitionTo переходить в новое состояние. В большинстве случаев вам не нужно его использовать, вы можете предпочесть $state.go.
Он принимает некоторые параметры в объекте options:
-
location: Еслиtrueобновит URL-адрес в строке местоположения, еслиfalseне будет. Если строка"replace", обновит URL-адрес, а также заменит последнюю историю. -
inherit: Еслиtrueнаследует параметры url из текущего URL. -
relative(stateObject, по умолчаниюnull): при переходе с относительным путем (например, '^') определяет, какое состояние должно относиться к. -
notify: Еслиtrueбудет транслировать события$stateChangeStartи$stateChangeSuccess. -
reload: Еслиtrueприведет к переходу, даже если состояние или параметры не изменились, например перезагрузка того же состояния.
$state.go - это своего рода ярлык, вызывающий $state.transitionTo с настройками по умолчанию:
-
location:true -
inherit:true -
relative:$state.$current -
notify:true -
reload:false
Это более удобно, так как синтакс проще. Вы можете назвать это только с именем состояния.
$state.go('home');