$ stateChangeStart - 未阻止状态更改
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$ stateChangeStart - 未阻止状态更改相关的知识,希望对你有一定的参考价值。
如果未经授权的用户尝试访问受限状态,受限制状态将在$state.go(fromState.name)
发回之前进行抢救。好像event.preventDefault();
不开火?
$rootScope.$on('$stateChangeStart',
function (event, toState, toParams, fromState, fromParams) {
if (toState.name == 'app.admin' || toState.name == 'app.bonus') {
AuthService.isAuthenticated().then(function (response) {
if (!response) {
event.preventDefault();
$rootScope.$broadcast(AUTH_EVENTS.notAuthenticated);
} else {
event.preventDefault();
if ('data' in toState && 'authorizedRoles' in toState.data) {
var authorizedRoles = toState.data.authorizedRoles;
if (!AuthService.isAuthorized(authorizedRoles)) {
$state.go(fromState.name, {}, {
reload: true
});
$rootScope.$broadcast(AUTH_EVENTS.notAuthorized);
}
}
}
}, function () {
event.preventDefault();
$rootScope.$broadcast(AUTH_EVENTS.notAuthenticated);
});
}
});
答案
你从异步回调中调用event.preventDefault()
。因此,在调用时,事件侦听器函数已经返回,并且由于事件未被阻止,因此路由器已导航到下一个状态。
如果你这样做会有用
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
if ((toState.name == 'app.admin' || toState.name == 'app.bonus')
&& !AuthService.isAuthenticated()) {
event.preventDefault();
}
}
但是,当然,这意味着您的服务需要同步返回布尔值,而不是承诺。
以上是关于$ stateChangeStart - 未阻止状态更改的主要内容,如果未能解决你的问题,请参考以下文章
$stateChangeStart 删除最初启用的 event.preventDefault
Angular Webpack ES2015 组件构建中未触发 angular-ui-router $stateChangeStart 事件
ui-router中使用$stateChangeStart来实现WEB用户登录跳转
记一次AngularJs 路由 $stateChangeStart不起作用(细节决定成败)