Das Endergebnis ist:
- Sie NICHT einen Dienst in den Provider - Konfiguration Abschnitt injizieren .
- Sie CAN einen Dienst in den Abschnitt injizieren , die der Anbieter-Dienst initialisiert .
Einzelheiten:
Angular Framework hat einen 2-Phasen-Initialisierungsprozess:
PHASE 1: Konfig
Während der config
Phase werden alle Anbieter initialisiert und alle config
Abschnitte ausgeführt. Die config
Abschnitte können Code enthalten, der die Anbieterobjekte konfiguriert, und daher können ihnen Anbieterobjekte injiziert werden. Da die Anbieter jedoch die Fabriken für die Serviceobjekte sind und die Anbieter zu diesem Zeitpunkt noch nicht vollständig initialisiert / konfiguriert sind -> können Sie den Anbieter in dieser Phase nicht bitten, einen Dienst für Sie zu erstellen -> in der Konfigurationsphase können Sie / nicht verwenden Injektionsdienste . Nach Abschluss dieser Phase sind alle Anbieter bereit (nach Abschluss der Konfigurationsphase kann keine Anbieterkonfiguration mehr durchgeführt werden).
PHASE 2: Ausführen
Während der run
Phase werden alle run
Abschnitte ausgeführt. Zu diesem Zeitpunkt sind die Anbieter bereit und können Dienste erstellen -> während der run
Phase können Sie Dienste verwenden / injizieren .
Beispiele:
1. Injektion der $http
Service Provider Initialisierungsfunktion WILL NOT Arbeit
//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;
};
});
Da wir versuchen, den $http
Dienst in eine Funktion einzufügen, die während der config
Phase ausgeführt wird, wird eine Fehlermeldung angezeigt:
Uncaught Error: Unknown provider: $http from services
Was dieser Fehler tatsächlich aussagt, ist, dass das, $httpProvider
was zum Erstellen des $http
Dienstes verwendet wird, noch nicht bereit ist (da wir uns noch in der config
Phase befinden).
2. Injizieren $http
Dienst in den Dienst Initialisierungsfunktion WILL Arbeit:
//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;
};
});
Da wir den Service jetzt in die Service-Initialisierungsfunktion run
einfügen , die während der Phase ausgeführt wird, funktioniert dieser Code.