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 configPhase werden alle Anbieter initialisiert und alle configAbschnitte ausgeführt. Die configAbschnitte 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 runPhase werden alle runAbschnitte ausgeführt. Zu diesem Zeitpunkt sind die Anbieter bereit und können Dienste erstellen -> während der runPhase können Sie Dienste verwenden / injizieren .
Beispiele:
1. Injektion der $httpService 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 $httpDienst in eine Funktion einzufügen, die während der configPhase ausgeführt wird, wird eine Fehlermeldung angezeigt:
Uncaught Error: Unknown provider: $http from services
Was dieser Fehler tatsächlich aussagt, ist, dass das, $httpProviderwas zum Erstellen des $httpDienstes verwendet wird, noch nicht bereit ist (da wir uns noch in der configPhase befinden).
2. Injizieren $httpDienst 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 runeinfügen , die während der Phase ausgeführt wird, funktioniert dieser Code.