AngularJS перенаправляет маршрут только на кнопку «Назад» в браузере

В моем приложении AngularJS я перенаправляю route на определенную страницу, когда пользователь не вошел в систему. Для этого я использую переменную $rootScope.

Теперь я хотел бы предотвратить кнопку «Назад» браузера, когда пользователь вошел в систему. Я хотел бы перенаправить его на определенную страницу (представление registration). Проблема в том, что я не знаю, есть ли событие кнопки "Назад".

Мой код:

 angular.module('myApp',[...]
//Route configurations
}])
.run(function($rootScope, $location){
               $rootScope.$on('$routeChangeStart', function(event, next, current){
                   if(!$rootScope.loggedUser) { 
                       $location.path('/register');
                   }
               });
               $rootScope.$on('$locationChangeStart', function(event, next, current){
                   console.log("Current: " + current);
                   console.log("Next: " + next);
               });
           });

Итак, на $locationChangeStart я бы написал псевдокод, например:

if (event == backButton){
     $location.path('/register');
}

Является ли это возможным?

Наивным решением было бы написать функцию, которая проверяет, находятся ли next и current в неправильном порядке, определяя, возвращается ли пользователь назад.

Есть другие решения? Я неправильно подхожу к проблеме?


person Atropo    schedule 30.10.2013    source источник
comment
Чего вы пытаетесь достичь? Зачем блокировать кнопку «Назад», если маршрут будет перенаправлен?   -  person Brian Lewis    schedule 30.10.2013
comment
Я хочу заблокировать поведение кнопки «Назад» по умолчанию, перенаправляя ее на первую страницу моего приложения, когда пользователь входит в систему.   -  person Atropo    schedule 30.10.2013


Ответы (1)


Я нашел решение, которое проще, чем я думал. Я регистрирую на объекте в $rootScope фактическое местоположение и при каждом изменении местоположения сверяюсь с новым. Таким образом, я могу определить, возвращается ли пользователь в историю.

angular.module('myApp',[...], {
    //Route configurations
}])
.run(function($rootScope, $location) {
    $rootScope.$on('$routeChangeStart', function(event, next, current) {
        if(!$rootScope.loggedUser) { 
            $location.path('/register');
        }
    });

    $rootScope.$on('$locationChangeSuccess', function() {
        $rootScope.actualLocation = $location.path();
    });

    $rootScope.$watch(function() { return $location.path() },
        function(newLocation, oldLocation) {
            if($rootScope.actualLocation == newLocation) {
                $location.path('/register');
            }
        }); 
    });
});
person Atropo    schedule 31.10.2013