Reputation: 245
How can I do that with ui-router? In ng-route I'm using this syntax :
router
.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('...')
}
})
But It not work with ui-router. I tried change to
$rootScope.$on('$stateChangeStart',function(event,next) {
if(next.$$state.isLogged){
console.log('...')
}
})
And I get islogged underfine
. How can I do that with angular-ui-router
EDIT
Here is state I want prevent . When user login , I push token of user in localStorage . And I want when user login , cant go state register. Here is router
.state('register',{
url:'/register',
templateUrl:'app/view/page/users/register.html',
controller:'regCtrl',
controllerAs:'vm',
isLogged:false
})
Here is code I push in local storage
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;
}
});
};
Upvotes: 0
Views: 796
Reputation: 38189
Solution for ui-router(lower than 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');
}
})
Solution for ui-router(1.0.0+):
stateChange event has been deprecated in ui-router 1.0.0+ and for the new version, you should use $transitions
(have to inject first)
$transitions.onStart({}, function(transition) {
if(!transition.to().isLogged) { // <------ access toState properties by transition.to()
return false;
}
});
Upvotes: 3