我正在使用 $stateChangeStart 进行登录。
在我的网站中,我有一些页面,用户在未登录时可以访问这些页面。
我编写此代码是为了注销并检查某些页面上的访问权限。
但是当用户转到有关页面时我遇到问题(不需要用户验证)
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
console.log('TS', toState, 'TP', toParams, 'FS', fromState, 'FP', fromParams)
if (!$rootScope.currentUser) {
console.log('NO USER')
if (toState.name !== 'login') {
event.preventDefault();
console.log('SOME ROUTE');
$state.go("login");
}
else if (toState.name !== 'about' ) {
console.log("about no user")
$state.go("about");
}
}
});
知道如何使用 $stateChangeStart 做到这一点
这与 else if 不起作用。
谢谢!
最佳答案
最佳实践是在每个路由上指定(在配置时)是否需要登录,
.state("users", {
url: "/users",
data: {
requiresLogin: true
}
})
然后您将能够检查状态是否需要在每个导航上登录,如下所示:
$rootScope.$on('$stateChangeStart', (event, toState, toParams, fromState, fromParams, options) => {
if(toState.data && toState.data.requiresLogin) {
// validate the user here, if not valid navigate to Login
}
});
作为奖励,您可以利用数据继承并指定需要使用abstract
状态登录的路由范围。
e.state("users", {
abstract: true,
url: "/users",
data: {
requiresLogin: true
}
})
.state("users.main", {
url: "/",
template: '<users-main></users-main>'
})
.state("users.page2", {
url: "/page2",
template: '<users-page2></users-page2>'
})
在上面的示例中,作为用户子状态的每个状态(名称中有 users.
前缀)将继承 data 属性,因此需要登录。
关于javascript - stateChangeStart - AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47345653/