Моя проблема на самом деле очень похож на найденной здесь:
AngularJs - cancel route change event
Короче говоря, я использую $ 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 для достижения того, что мне нужно?
Извините за поздний ответ. Когда что-то работает для меня, я склонен волноваться и двигаться дальше. Это оказалось идеальным решением для того, что я делал.В функции загрузки я смог добавить такие вещи, как '$ http' и' $ location', чтобы обрабатывать мои запросы. – ThisLanham
Мне пришлось сделать функцию загрузки более похожей на ту, что была у Nick http://stackoverflow.com/a/19482187/1449799 (отклонение не работало так, как написано здесь) – Michael
Функция 'load' должна выглядеть следующим образом: 'var deferred = $ q.defer(); if (access) {deferred.resolve(); } else {deferred.reject(); $ Location.url ('/ Войти'); } return deferred.promise; ' – Clay