Моя проблема на самом деле очень похожа на найденную здесь:
AngularJs - отменить событие изменения маршрута
Короче говоря, я использую $routeChangeStart и пытаюсь изменить текущий маршрут, используя $location. Когда я это делаю, консоль показывает мне, что исходная страница все еще загружается и быстро перезаписывается новой страницей.
Предоставленное решение состояло в том, чтобы использовать $locationChangeStart вместо $routeChangeStart, что должно работать для предотвращения дополнительного перенаправления. К сожалению, я использую дополнительные данные в $routeprovider, к которым мне нужно получить доступ при изменении маршрута (я использую их для отслеживания ограничений страницы). Вот пример...
$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 для достижения того, что мне нужно?