Работа напрямую с $ window.location - не лучший выбор, когда вам приходится иметь дело с динамической маршрутизацией.
Я рекомендую использовать UI-Router .
С помощью UI-Router вы можете зарегистрировать функцию, которая будет срабатывать после определенных событий навигации.
Попробуйте зарегистрировать функцию, которая будет выполняться при попытке ввести в состояние (или маршрут).
В этом примере я определил LoginHook , который проверяет, должен ли каждый переход перенаправляться на "/ login" или его можно разрешить.
LoginHook.js
LoginHook.$inject = ['$transitions','$state'];
export function LoginHook ($transitions, $state) {
//
$transitions.onEnter({/*Matching every destination*/}, $transition => {
//
if($transition.to().name !== 'login') {
//
if( user.allowed ) { // Replace this with your auth check
//
return true; // Allowing access
} else {
//
redirectToLogin(); // Redirecting to "login"
}
} else {
// Avoiding auth checking if i'm going to "login"
return true;
}
})
//
function redirectToLogin() {
//
$state.go('login');
}
}
Отредактированный ответ
Как я вижу в вашей корзине, вы должны обработать текущую навигацию перед тем, как заменить ее другой.
Попробуйте это:
resolve: {
data: function ($location, $window, $q) {
if(!localStorage.adsomaToken && !localStorage.adsomaUserId &&
!localStorage.adsomaAccountType) {
//
$q.reject('NOT ALLOWED');
$location.path('/login');
} else {
$q.resolve('ALLOWED');
}
}
}