ui-router preventDefault()以空视图结束

时间:2015-06-28 09:24:36

标签: javascript angularjs events angular-ui-router

我的角度应用中有一个部分要求用户登录并具有一定的级别或权限(编辑500,管理员1000)

这些要求是在状态配置中写的,如下所示:

    .state('posts.edit', {
        url: '/edit/{id:int}',
        resolve: {
            post: ['$stateParams', 'Post', function($stateParams, Post){
                return Post.findOne($stateParams.id);
            }]
        },
        controller: 'postEditCtrl',
        templateUrl: '/partials/posts/edit.html',
        requiresRight: 500
    })
    .state('admin',{
        url: '/admin',
        controller: 'adminCtrl',
        templateUrl: '/partials/admin/dashboard.html',
        requiresRight: 1000
    });

然后,在我的.run中,我有$ stateChangeStart的事件监听器,如果用户未被授权,它应该阻止状态关闭。 代码:

site.run(["$rootScope", "$timeout", "$state", function($rootScope, $timeout, $state){

$rootScope.state = {
    user: false
}
$rootScope.isAdmin = function(){
    if($rootScope.state.user && $rootScope.state.user.rights >= 1000){
        return true
    }
    else return false;
}
$rootScope.isEditor = function(){
    if($rootScope.state.user && $rootScope.state.user.rights >= 500){
        return true
    }
    else return false;
}


$rootScope.$on('$stateChangeStart', function(event, toState){ 
    if(toState.requiresRight){
        if(!$rootScope.state.user || toState.requiresRight > $rootScope.state.user.rights){
            console.log("needed",toState.requiresRight)
            console.log("have", $rootScope.state.user?$rootScope.state.user.rights:false);
            event.preventDefault();
            // $state.go("login");
        }
    }

})

}])

但是,当我测试时,我的状态更改并未被拒绝,但我得到一个空视图。另外我的侧边栏按钮包含ng-if(注销,管理链接),显示几毫秒。

我在一个plunkr中尝试过,但无法复制它:link

0 个答案:

没有答案