场景是:
对于我的应用中的某些路线,我想强制用户先完成他们的个人资料。
有几种方法可以实现这一目标:
$stateChangeStart
事件,从服务器加载用户,检查个人资料是否完整使用方法1,是否可以将用户解析重用于其他路由(假设用户在auth解析时解决了待处理的问题)?
使用方法2,我觉得这种方法容易出错,很难跟踪。
这个问题有最好的做法吗?
答案 0 :(得分:0)
您可以使用service
中的resolve
来减少routes
和reuse
resolve function
以下是它的示例实现。
$stateProvider
.state('inbox', {
...
resolve: {
profile: function (UserService) {
return UserService.getUser();
},
}
})
.state('dashboard', {
...
resolve: {
profile: function (UserService) {
return UserService.getUser();
},
}
});
您的控制器可以是,
angular
.module('app')
.controller('DashboardCtrl', DashboardCtrl);
function DashboardCtrl(profile,$scope) {
this.user_profile = profile;
}
更新:
您可以使用redirection
中的resolve
,
resolve: {
profile: function (UserService,$state) {
return UserService.getUser().then(function(profile){
if (profile.id) {
return profile;
} else {
$state.go('/')
}
},
}