以下是我的$ stateProvider配置的摘录
.state('main', {
url: '/',
auth: true,
views: {
'@': {
templateUrl: 'main.html',
controller: 'MainController'
},
'content@main' : {}
},
resolve: {
$user: function ($q, Session) {
return Session.user();
}
},
onEnter: function($state, Session, $timeout) {
$timeout(function() {
var role = Session.checkUserRole();
if (role !== 'administrator') {
$state.go('redirect');
}
}, 0);
}
})
即使角色不是“管理员”,它仍会执行MainController中的所有代码。以前,我在$ stateChangeStart中有逻辑但是Session.checkUserRole()在我刚刚完成登录后总是返回null。这很可能是由于Javascript的异步性质。是的,我的run.js中的命令首先在我调用的Auth函数中的promise之前完成。 :(
我在寻找是否可以用不同的方式写出决定来容纳我想要发生的事情。
我也不喜欢将$ state.go放在MainController中,因为你仍然可以看到应用程序虽然只有500ms。还是很糟糕!即使我被重定向到警告页面,我仍然看到我的应用程序调用了后端,并且能够检索数据。
如果Session.checkUserRole()在我的.run中返回正确的值并且不为null,那么我就完成了
任何想法/想法?
答案 0 :(得分:0)
在将Session工厂中的函数转换为promise然后在stateProvider中使用该promise时,我最终修复了它。 :)