Разница между $state.transitionTo() и $state.go() в Angular ui-router
В AngularJS я иногда вижу $state.transitionTo()
, а иногда мы используем $state.go()
. Может ли кто-нибудь сказать мне, как они отличаются друг от друга и когда нужно использовать друг друга?
Ответы
Ответ 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');