2016-08-25 3 views
0

は、私のような私のウェブサイトのためのログインモジュールを作成し、ログインするためにリダイレクトすることはできません。角度ログインページ

angular.module('caknow', [ 
    'ui.router', 
    'ngStorage', 
    'authentication', 
    'login' 
]) 
    .config(['$stateProvider', '$urlRouterProvider',function($stateProvider, $urlRouterProvider) { 

    $stateProvider 
     .state('index', { 
     url: '/', 
     templateUrl: '../template/dashboard/dashboard.html' 
     }) 
     .state('login', { 
     url: '/login', 
     templateUrl: '../template/authen/login.html', 
     controller: 'loginController' 
     }); 
    }]) 
    .run(['$location', '$http', 'tokenSer', '$state', '$rootScope', function($location, $http, tokenSer, $state, $rootScope) { 
    $http.defaults.headers.common['x-api-key'] = '*********'; 
    var token = tokenSer.get(); // service to get token store in localStorage. 
    if (token) { 
     $http.defaults.headers.common['x-access-token'] = 'token'; 
    } 

    console.log("hello world"); 
    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams, options){ 
     if ($location.path() != '/login' && !token) { 
      console.log("hello world login"); 
     $state.go('login'); 
     } 
    }); 
    }]) 

などのメインページ:index状態については

<BODY ng-app="caknow"> 
    <div ui-view></div> 
    </BODY> 

、Iメインページのdashboard.htmlテンプレートをロードします。
loginの状態では、メインページの読み込みlogin.htmlテンプレートが必要です。
ユーザーがログインせずにサーバーからトークンを取得した場合、ユーザーはlogin州にリダイレクトされます。しかし、http-serverを使ってサーバーを起動し、localhost:portに初めてアクセスしようとすると、私はログインページにリダイレクトせず、白いページを表示します。私の意見では、私は$stateChangeStartが放出しないことがわかります。

答えて

0

あなたは別のものを始めることができるように、デフォルトのイベントを防ぐために持っている:

event.preventDefault();

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams, options){ 
    if ($location.path() != '/login' && !token) { 
     event.preventDefault(); 
     $state.go('login'); 
    } 
}); 
+0

それは動作しません。 $ stateChangeStartが無限に放出されていることがわかります –

+0

$ stateChangeSuccessに追加して、それがうまくいくかどうか確認できますか? –