2014-12-24 81 views
2

我有一個使用$state.go跳轉到狀態的提供程序配置。當我使用$state,因爲它的工作原理函數參數,但是當我嘗試修改功能參數,以支持微小如

.provider('Navigation',["$stateProvider","$state",function($stateProvider,$state) 

然後我得到了以下解決相關性錯誤:

Uncaught Error: [$injector:modulerr] Failed to instantiate module apfPrototypeJs due to: 
Error: [$injector:unpr] Unknown provider: $state 

如何繞過這個問題?

+2

只能在提供包裝注入'$ stateProvider'那裏,你可以在實際的服務中注入'$ state'服務,即在提供者的'$ get'中。例子'.provider('Navigation',[「$ stateProvider」,function($ stateProvider){this。$ get = [「$ state」,function($ state){console.log($ state)}]}]) ;'但是,除非你想設置某種通用的配置設置提供程序功能,否則很少(至少我從來不必)在另一個提供程序中注入提供程序。 – PSL

+0

@PSL你是一個救星!事實上,我在提供者$ get中使用$ state,但我並沒有在那裏注入依賴關係!花了一整天的時間來調試 –

回答

1

您只能在提供程序中注入providers,因爲此時尚未實例化服務,還因爲提供程序方法特別用於配置,它們只能在應用程序的配置階段訪問,它不會使感覺有能力注入任何服務。但是你可以在通過$get屬性定義的提供者的構造函數中注入任何服務(而不是提供者)。

.provider('Navigation',["$stateProvider",function($stateProvider) { //Inject provider here 

    this.$get = ["$state", function($state){ //Inject $state here 
     console.log($state) 
    }] 
}]); 

作爲替代語法(使用$注入,以支持縮小),你可以這樣做: -

.provider('Navigation', function(){ 

    this.$get = navigationService; 

    navigationService.$inject = ['$state']; 

    function navigationService($state) { 
     console.log($state) 
    } 
}]);