Разница между $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');