157 votes

Angular - ui-router récupérer l'état précédent

Existe-t-il un moyen d'obtenir l'état précédent de l'état actuel ?

Par exemple, je voudrais savoir quel était l'état précédent avant l'état actuel B (où l'état précédent aurait été l'état A).

Je ne suis pas en mesure de le trouver dans les pages de doc ui-router github.

1voto

Naveen Kumar V Points 469

Je garde la trace des états précédents dans $rootScope Ainsi, en cas de besoin, je n'aurai qu'à appeler la ligne de code ci-dessous.

$state.go($rootScope.previousState);

En App.js :

$rootScope.$on('$stateChangeSuccess', function(event, to, toParams, from, fromParams) {
  $rootScope.previousState = from.name;
});

0voto

Une solution très simple consiste à éditer la chaîne $state.current.name et à couper tout ce qui inclut et suit le dernier '.' - vous obtenez le nom de l'état parent. Cela ne fonctionne pas si vous sautez souvent d'un état à l'autre, car le chemin actuel est simplement analysé. Mais si vos états correspondent à l'endroit où vous vous trouvez réellement, alors cela fonctionne.

var previousState = $state.current.name.substring(0, $state.current.name.lastIndexOf('.'))
$state.go(previousState)

0voto

Pour UI-Router(>=1.0), les événements StateChange ont été dépréciés. Pour un guide de migration complet, cliquez aquí

Pour obtenir l'état précédent de l'état actuel dans UI-Router 1.0+ :

app.run(function ($transitions) {
    $transitions.onSuccess({}, function (trans) {
         // previous state and paramaters
         var previousState = trans.from().name;
         var previousStateParameters = trans.params('from');
    });
});

-2voto

otaviodecampos Points 640

Vous pouvez retourner l'état de cette façon :

$state.go($state.$current.parent.self.name, $state.params);

Un exemple :

(function() {
    'use strict'

    angular.module('app')
        .run(Run);

    /* @ngInject */
    function Run($rootScope, $state) {

        $rootScope.back = function() {
            $state.go($state.$current.parent.self.name, $state.params);
        };

    };

})();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X