2016-12-06 68 views
0

如果用戶鍵入不存在的url,我需要將「登錄」用戶重定向到主頁。我有一個名爲「authService」的服務,我可以檢查user auth == truefalse如果輸入不存在url將用戶重定向到主頁

我使用$STATE.GO重定向到登錄頁面,如果用戶不是授權(authService.auth == false)。

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

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

現在我要讓類似於用戶重定向到主頁,當用戶auth == true。當用戶使用令牌時,嘗試輸入不存在的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"); 
     }); 
    }); 
}]); 
相關問題