2014-12-06 111 views
0

正在嘗試管理對某些網址的訪問。當我沒有登錄,我嘗試導航到主頁時,它必須將我重定向到登錄頁面。 當我導航到主頁'/'時會發生什麼:在我的瀏覽器中,URL是#!/ 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'); 
      } 

     }) 
}]); 
+0

你可以做一個小提琴? – Anubhav 2014-12-06 17:28:22

回答

1

的能夠一$routeChangeStart事件期間更改$location在角1.3.0被改變的行爲。這是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'); 
     }); 
    } 
});