使用$ routeChangeStart管理Access

时间:2014-12-06 17:07:46

标签: javascript angularjs

尝试管理对某些网址的访问权限。当我没有登录并尝试导航到主页时,它必须将我重定向到登录页面。 当我导航到主页时会发生这种情况' /' :在我的浏览器中,网址是#!/ login但是在ng-view中我获得了主视图而不是登录视图。 导航到登录和注册工作正常

var app = angular.module('todo', ['ngRoute']);

app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {

    $locationProvider.html5Mode(false); 
    $locationProvider.hashPrefix('!');

    $routeProvider
    .when("/", {
        controller: "homeController",
        templateUrl: "app/partials/home.html",
        requireAuth: true
    })

    .when("/login", {
        controller: "loginController",
        templateUrl: "app/partials/login.html",
        requireAuth: false
    })

   .when("/signup", {
        controller: "signupController",
        templateUrl: "app/partials/signup.html",
        requireAuth: false
    })

   .otherwise({ redirectTo: "/" });

}])

 // Manage Access
.run(['$rootScope', '$location', 'authService', function($rootScope, $location, authService){      
       $rootScope.$on('$routeChangeStart', function(evt, next, current){        
          if((!authService.userInfo.isAuth)&&(next.requireAuth)){
            $location.path('login');
          }

       })
}]);

1 个答案:

答案 0 :(得分:1)

在Angular 1.3.0中,$location事件期间能够更改$routeChangeStart的行为已被更改。这是fixed in a more recent update,因此您可以更新到最新版本,也可以使用this workaround

$rootScope.$on("$routeChangeStart", function (event, next, current) {
    if ((!authService.userInfo.isAuth) && (next.requireAuth)) {
        event.preventDefault();
        $rootScope.$evalAsync(function() {
            $location.path('/login');
        });
    }
});