我怎样才能使用ui-router?在ng-route中我使用这种语法:
路由器
.when('/login',{
templateUrl:'app/view/page/users/login.html',
isLogged:true
})
app run
$rootScope.$on('$routeChangeStart',function(event,next) {
if(next.$$route.isLogged){
console.log('...')
}
})
但它不适用于ui-router。 我尝试过改为
$rootScope.$on('$stateChangeStart',function(event,next) {
if(next.$$state.isLogged){
console.log('...')
}
})
我得到islogged underfine
。我怎么能用angular-ui-router
修改
这是我要防止的状态。用户登录时,我在localStorage中推送用户令牌。我想在用户登录时,不能进入州注册。 这是路由器
.state('register',{
url:'/register',
templateUrl:'app/view/page/users/register.html',
controller:'regCtrl',
controllerAs:'vm',
isLogged:false
})
以下是我在本地存储中推送的代码
function authLogin(logData) {
return
$http.post('/api/authenticate',logData).then(function(data) {
if(data.data.token){
console.log(data);
authToken.setToken(data.data.token);
return data.data;
}
});
};
答案 0 :(得分:3)
ui-router的解决方案(低于1.0.0):
$rootScope.$on('$stateChangeStart',function(event,next) {
if(next.isLogged){ // <------access property directly here
// console.log('...')
event.preventDefault();
return $state.go('any other state');
}
})
ui-router的解决方案(1.0.0 +):
在ui-router 1.0.0+中已经弃用了stateChange事件,对于新版本,你应该使用$transitions
(必须先注入)
$transitions.onStart({}, function(transition) {
if(!transition.to().isLogged) { // <------ access toState properties by transition.to()
return false;
}
});