Angular - ui-router get previous state Angular - ui-router get previous state angularjs angularjs

Angular - ui-router get previous state


I use resolve to save the current state data before moving to the new state:

angular.module('MyModule').config(['$stateProvider', function ($stateProvider) {    $stateProvider        .state('mystate', {            templateUrl: 'mytemplate.html',            controller: ["PreviousState", function (PreviousState) {                if (PreviousState.Name == "mystate") {                    // ...                }            }],            resolve: {                PreviousState: ["$state", function ($state) {                    var currentStateData = {                        Name: $state.current.name,                        Params: angular.copy($state.params),                        URL: $state.href($state.current.name, $state.params)                    };                    return currentStateData;                }]            }        });}]);


ui-router doesn't track the previous state once it transitions, but the event $stateChangeSuccess is broadcast on the $rootScope when the state changes.

You should be able to catch the prior state from that event (from is the state you're leaving):

$rootScope.$on('$stateChangeSuccess', function (ev, to, toParams, from, fromParams) {   //assign the "from" parameter to something});


For sake of readability, I'll place my solution (based of stu.salsbury's anwser) here.

Add this code to your app's abstract template so it runs on every page.

$rootScope.previousState;$rootScope.currentState;$rootScope.$on('$stateChangeSuccess', function(ev, to, toParams, from, fromParams) {    $rootScope.previousState = from.name;    $rootScope.currentState = to.name;    console.log('Previous state:'+$rootScope.previousState)    console.log('Current state:'+$rootScope.currentState)});

Keeps track of the changes in rootScope. Its pretty handy.