결론은 다음과 같습니다.
- 당신은 수없는 공급자 구성 섹션에 서비스를 주입 .
- 당신은 CAN 공급자의 서비스를 초기화하는 섹션으로 서비스를 주입 .
세부:
Angular 프레임 워크에는 2 단계 초기화 프로세스가 있습니다.
1 단계 : 구성
이 config
단계 동안 모든 공급자가 초기화되고 모든 config
섹션이 실행됩니다. config
섹션 제공자 객체를 구성하고, 따라서 그들이 제공 개체를 주입 할 수있는 코드를 포함 할 수있다. 그러나 공급자는 서비스 개체의 공장이고이 단계에서는 공급자가 완전히 초기화 / 구성 되지 않았기 때문에 ->이 단계에서는 공급자 에게 서비스 생성을 요청할 수 없습니다-> 구성 단계에서는 사용할 수 없습니다 / 주입 서비스 . 이 단계가 완료되면 모든 공급자가 준비됩니다 (구성 단계가 완료된 후에는 공급자 구성을 더 이상 수행 할 수 없음).
2 단계 : 실행
run
단계 동안 모든 run
섹션이 실행됩니다. 이 단계 에서 공급자는 준비가되어 있으며 서비스를 만들 수 있습니다.-> run
단계에서 서비스를 사용 / 주입 할 수 있습니다 .
예 :
1. $http
공급자 초기화 기능에 서비스를 삽입하면 작동 하지 않습니다.
//ERRONEOUS
angular.module('myModule').provider('myProvider', function($http) {
// SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
...
this.$get = function() {
// code to initialize/configure the SERVICE goes here (executed during `run` stage)
return myService;
};
});
단계에서 $http
실행되는 함수에 서비스 를 주입하려고하므로 config
오류가 발생합니다.
Uncaught Error: Unknown provider: $http from services
이 오류가 실제로 말하는 것은 서비스 $httpProvider
를 만드는 데 사용되는이 $http
아직 준비되지 않았다는 것입니다.config
단계 ).
주수 2. $http
서비스 초기화 기능에 대한 서비스 의지의 작업을 :
//OK
angular.module('myModule').provider('myProvider', function() {
// SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
...
this.$get = function($http) {
// code to initialize/configure the SERVICE goes here (executed during `run` stage)
return myService;
};
});
이제 서비스를 run
단계 동안 실행되는 서비스 초기화 함수에 주입하므로이 코드가 작동합니다.