我在我的角度应用程序中使用 ui-router 。目前我有两条路线 /signin 和 /user。
最初,当用户单击登录按钮时,它显示 /signin,我发送 ajax 请求并获取用户 ID。我将用户 ID 存储在 localstorage 中并将状态更改为 /user。
现在,我想要的是,如果用户未登录,并且用户将地址栏更改为 /user,它不会更改视图,而是再次将地址栏 url 更改为 /signin。
我尝试使用解析,但它不起作用。我的代码是:-
module.exports = function($stateProvider, $injector) {
$stateProvider
.state('signin', {
url: '/signin',
template: require('../templates/signin.html'),
controller: 'LoginController'
})
.state('user', {
url: '/user/:id',
template: require('../templates/user.html'),
resolve:{
checkLogin: function(){
var $state = $injector.get('$state');
console.log("in resolve");
if (! window.localStorage.getItem('user-id')) {
console.log("in if")
$state.go('signin');
}
}
},
controller: 'UserController'
})
}
请帮我解决这个问题。
我认为不允许在状态转换过程中改变状态。
所以,解决这个问题的方法就是checkLogin
解析参数(我在下面将其更改为userId
)是一个返回值或承诺的函数(在本例中,如果您无法获得则为拒绝的承诺)user-id
).
然后你需要处理这个$rootScope.$on('$stateChangeError')
并检查错误代码。
resolve: {
userId: function ($q, $window) {
var userId = $window.localStorage.getItem('user-id');
if (!userId) {
return $q.reject("signin")
}
return userId;
}
}
并重定向到$stateChangeError
处理程序:
$rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, error) {
if (error === "signin") {
$state.go("signin");
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)