2014-12-24 2 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 당신은 생명의 은인입니다! 실제로 공급자 $에서 $ 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) 
    } 
}]); 
관련 문제