Моя проблема на самом деле очень похожа на найденную здесь:
AngularJs - отменить событие изменения маршрута
Короче говоря, я использую $routeChangeStart и пытаюсь изменить текущий маршрут, используя $location. Когда я это сделаю, консоль показывает мне, что исходная страница по-прежнему загружается и быстро перезаписывается новой страницей.
Предоставленное решение состояло в том, чтобы использовать $locationChangeStart вместо $routeChangeStart, который должен работать для предотвращения дополнительной перенаправления. К сожалению, я использую дополнительные данные в $rubeprovider, к которому мне нужно получить доступ, изменяя маршрут (я использую его для отслеживания ограничений страницы). Вот пример...
$routeProvider.
when('/login', { controller: 'LoginCtrl', templateUrl: '/app/partial/login.html', access: false}).
when('/home', { controller: 'HomeCtrl', templateUrl: '/app/partial/home.html', access: true}).
otherwise({ redirectTo: '/login' });
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if(next.access){
//Do Stuff
}
else{
$location.path("/login");
//This will load the current route first (ie: '/home'), and then
//redirect the user to the correct 'login' route.
}
});
С $routeChangeStart я могу использовать "следующий" и "текущий" параметры (см. AngularJS - $route) в качестве объектов для извлечения мои значения доступа. С $locationChangeStart эти два параметра возвращают строки url, а не объекты. Таким образом, похоже, что нет способа получить мои значения доступа.
Можно ли каким-либо образом объединить мощность переадресации $locationChangeStart с гибкостью объекта $routeChangeStart для достижения того, что мне нужно?