Angularjs 尝试更改路由时页面处于无限循环中
每当我在用户存储器中拾取登录令牌时,我都会尝试更改我的路由,因此用户会登录到配置文件页面或登录页面。但由于某些原因,当我访问/或登录时,页面会以无限循环结束。我怎么修理它 controller.js index.html 当您必须处理动态路由时,直接使用$window.location不是最佳选择 我建议使用 使用UI路由器,您可以注册一个功能,该功能将在导航的某些事件后触发 考虑注册一个函数,该函数将在您尝试进入某个状态或路由时执行 在本例中,我定义了一个LoginHook,用于检查是否应该将每个转换重定向到/login,或者是否可以允许 LoginHook.jsAngularjs 尝试更改路由时页面处于无限循环中,angularjs,Angularjs,每当我在用户存储器中拾取登录令牌时,我都会尝试更改我的路由,因此用户会登录到配置文件页面或登录页面。但由于某些原因,当我访问/或登录时,页面会以无限循环结束。我怎么修理它 controller.js index.html 当您必须处理动态路由时,直接使用$window.location不是最佳选择 我建议使用 使用UI路由器,您可以注册一个功能,该功能将在导航的某些事件后触发 考虑注册一个函数,该函数将在您尝试进入某个状态或路由时执行 在本例中,我定义了一个LoginHook,用于检查是否应该将
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');
}
}
}
是否可以使用$routeProvider执行此操作?这就是我目前正在做的:
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');
}
}
}