3

I have a question: When I'm in a page I want return to previous page. I use the $routeProvider. How can I read the previous url?

I try to use this code in my controller but doesn't work...

angular.module.controller('myController', 
  function($scope, $routeParams, $http, $location, $rootScope) {

    $rootScope.$on("$routeChangeSuccess", 
      function (event, current, previous, rejection) {

        console.log(previous);
        $location.path('PREVIOUS PATH');

    });
 });   

How can I read the previous path? Thanks!

Radim Köhler
  • 122,561
  • 47
  • 239
  • 335
Alessandro
  • 905
  • 3
  • 17
  • 32

1 Answers1

3

I am not fully sure, what you want to achieve. So I would suggest, check this before you go your own way:

How to implement history.back() in angular.js

But, in case, you want to know how to keep the last state with angular and UI-Router, we can do it with a service. There is some naive implementation tracking just last state (not challenging the history.back())

Check the working example

Service definition:

.factory('PreviousState', ['$rootScope', '$state',
  function ($rootScope, $state) {

    var lastHref = "/home",
        lastStateName = "home", 
        lastParams = {}; 

    $rootScope.$on("$stateChangeSuccess", function (event, toState, toParams
                                                       , fromState, fromParams) {
      lastStateName = fromState.name;
      lastParams = fromParams;
      lastHref = $state.href(lastStateName, lastParams)  
    })

    return {
      getLastHref: function (){ return lastHref ; },
      goToLastState: function (){ return $state.go(lastStateName, lastParams); },
    }

}])

So we just do listen the $stateChangeSuccess and keep the track of last state name and its $stateParams.

We can inject our service to all scopes:

.run(['$rootScope', 'PreviousState',
  function ($rootScope, PreviousState) {
    $rootScope.PreviousState = PreviousState;
}])

And we can use it as a click or href:

<button ng-click="PreviousState.goToLastState()">go back</button>
<a ng-href="#{{PreviousState.getLastHref()}}" > go to last href</a>

Check that in action here

Community
  • 1
  • 1
Radim Köhler
  • 122,561
  • 47
  • 239
  • 335
  • I resolved with similar solution...I used $rootScope.$on('$locationChangeSuccess', function (evt, absNewUrl, absOldUrl) and so I can take the absOldUrl...Thanks! – Alessandro May 20 '15 at 07:54