web-dev-qa-db-fra.com

Différence entre ui-sref et $ state.go dans le routeur AngularJS UI-Router

Existe-t-il une différence fonctionnelle entre ui-sref Et $state.go()?

ui-sref Est utilisé dans <a>...</a> Et $state.go('someState') est utilisé dans un contrôleur.

En HTML, j'utiliserais:

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

alors que dans une fonction j'utiliserais quelque chose comme:

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

Alors, est-ce le cas ou dois-je ajouter quelque chose après $state.go()? En supposant que l'état actuel est currentState.

45
Aniket Sinha

Il n'y a aucune fonctionnelle différence entre ui-sref Et $state.go. Voir la doc

Activation d'un état

Il y a trois manières d'activer un état:

  • Appelez $state.go(). Méthode de commodité de haut niveau.
  • Cliquez sur un lien contenant la directive ui-sref.
  • Accédez au url associé à l'état.

Donc, à la fin, ils font la même chose, et comme on peut le voir dans le code de la directive 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);
      });

il appelle $state.go()

Et aussi comme discuté ici: i-sref :

ui-sref='stateName' - Accédez à l'état, pas de paramètre. 'stateName' peut être n'importe quel état absolu ou relatif valide, respectant les mêmes règles de syntaxe que $state.go()

50
Radim Köhler

Oui, il y a une différence. Comme vous pouvez le voir dans la question:

Cadre ionique $ state.go ('app.home'); ajoute-t-il le bouton de retour sur la page où je veux aller (comment l'enlever??

le $ state.go ajoute par défaut un bouton de retour. La solution pour que cela se comporte exactement de la même manière est d'appeler:

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

avant d'appeler $ state.go.

8
Gerard Carbó