2016-12-06 10 views
0

ユーザが既存のURLを入力していない場合は、「ログインした」ユーザをホームページにリダイレクトする必要があります。 user auth == truefalseかどうかを確認できる「authService」というサービスがあります。既存のURLが入力されていない場合、ユーザをホームページにリダイレクト

私は$STATE.GOを使用して、ユーザーが認証されていない場合はログインページにリダイレクトします(authService.auth == false)。ユーザーがauth == trueとき

app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$httpProvider', 
function ($stateProvider, $urlRouterProvider, $locationProvider) { 
$urlRouterProvider.otherwise(function ($injector, $location) { 

     var $state = $injector.get("$state"); 
     $state.go("login"); 
    }); 
}]); 

は、今私は、ホームページにユーザーをリダイレクトするために類似したようにしたいです。トークンを持つユーザーが、既存のURLを入力せずにホームページにリダイレクトしようとしました。

これを注入authServiceサービスで行い、if/elseを試してみます。 しかし、私はエラー

Error: $injector:unpr Unknown Provider Unknown provider: authService

app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$httpProvider', 'authService', 
function ($stateProvider, $urlRouterProvider, $locationProvider, authService) { 
if (authService.auth == false) { 
    $urlRouterProvider.otherwise(function ($injector, $location) { 

     var $state = $injector.get("$state"); 
     $state.go("login"); 
    }); 
    } 
else { 
    $urlRouterProvider.otherwise(function ($injector, $location) { 

     var $state = $injector.get("$state"); 
     $state.go("home"); 
    }); 

} 
}]); 

はこの悪いソリューションです取得するので、これは動作しませんか? app.configにカスタムサービスを注入できますか?誰かが私を助けることができますか?

ありがとうございます。

答えて

1

あなたはrun機能でこれを行うと$stateChangeイベントを使用する必要があります

app.run(['$state', '$rootScope', 'authService', function($state, $rootScope, authService) { 
    $rootScope.$on("$stateChangeStart", function(event, toState) { 
     if (toState.name !== "home" && !authService.auth) { 
      // Prevent going to the state 
      event.preventDefault(); 
      $state.go("home"); 
     }); 
    }); 
}]); 
関連する問題