Разница между ui-sref и $state.go в UL-маршрутизаторе AngularJS

Существует ли какая-либо функциональная разница между ui-sref и $state.go()?

ui-sref используется в <a>...</a>, а $state.go('someState') используется в контроллере.

В HTML я бы использовал:

<a ui-sref="currentState.state1">Link</a>

тогда как в функции я бы использовал что-то вроде:

if(someCondition) {
    $state.go('currentState.state1');
}

Итак, это то, что мне нужно добавить что-то после $state.go()? Предполагая текущее состояние currentState.

Ответ 1

Не существует функциональной разницы между ui-sref и $state.go. См. Документ

Активация состояния

Существует три основных способа активации состояния:

  • Вызов $state.go(). Высокоуровневый метод удобства.
  • Нажмите ссылку, содержащую директиву ui-sref.
  • Перейдите к url, связанному с состоянием.

Итак, они в конце делают то же самое, и мы можем видеть в коде директивы ui-sref:

...
element.bind("click", function(e) {
    var button = e.which || e.button;
    if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {

      var transition = $timeout(function() {
        // HERE we call $state.go inside of ui-sref
        $state.go(ref.state, params, options);
      });

он вызывает $state.go()

А также, как обсуждалось здесь: ui-sref:

ui-sref='stateName' - перейти к состоянию, без параметров. "stateName" может быть любым действительным абсолютным или относительным состоянием, следуя тем же синтаксическим правилам, что и $state.go()

Ответ 2

Да, есть разница. Как вы можете видеть в вопросе:

Ионная структура $state.go('app.home'); добавляет обратно кнопку на странице, куда я хочу пойти (как ее удалить)?

$state.go по умолчанию добавляет кнопку "Назад". Решение, чтобы заставить его вести себя точно так же, это вызвать:

$ionicHistory.nextViewOptions({disableBack: true});

перед вызовом $state.go.