$ stateChangeError未重定向到主页

时间:2015-02-17 02:16:17

标签: angular-ui-router

我正在尝试将页面重定向到主页,如果用户没有访问权限但看起来像$ location.path('/')和$ state.go('main')都不起作用。需要帮助来解决这个问题。有什么想法吗?

angular.module('app').config(function($stateProvider, $urlRouterProvider, $locationProvider){
    $urlRouterProvider.otherwise('/');
    $stateProvider
        .state('main', {
            url: '/',
            templateUrl: 'partials/main/main',
            controller: 'fegMainCtrl'
    })
        .state('user-admin', {
            url: '/admin/users',
            templateUrl: 'partials/admin/user-list',
            controller: 'fegUserListCtrl',
            resolve: {
                auth: function(fegIdentity, $q) {
                    if(fegIdentity.currentUser && fegIdentity.currentUser.roles.indexOf('admin') > -1) {
                        return true;
                    }else {
                        return $q.reject('not authorized');
                    }
                }
            }
    });
    $locationProvider.html5Mode(true);
});

angular.module('app').run(function($rootScope, $location) {
    $rootScope.$on('$stateChangeError', function(event, current, previous, rejection) {
        if(rejection === 'not authorized'){
            $rootScope.$apply(function(){
                $location.path('/');
            });
        }
    })
});

1 个答案:

答案 0 :(得分:0)

我的解决方案是用 $ state.go('state.name')替换 $ location.path('/ state / url')

在你的情况下(注意$ stateChangeError参数):

$rootScope.$on( "$stateChangeError", function( event, toState, toParams, fromState, fromParams, rejection){
    if( rejection === 'not authorized' ){
        return $state.go( 'main' );
    }
});