Nguyễn Bảo Dũng
Nguyễn Bảo Dũng

Reputation: 245

Prevent next state in angular-ui-router

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

Answers (1)

Pengyy
Pengyy

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

Related Questions