防止angular-ui-router中的下一个状态

时间:2017-05-13 11:32:48

标签: angularjs angular-ui-router

我怎样才能使用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;
                        }

                        });
                    };

1 个答案:

答案 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;  
    }
});