La ligne de fond est:
-
Vous NE peut pas injecter un service dans la configuration de fournisseur de l'article.
-
Vous POUVEZ injecter un service dans la section qui initialise le fournisseur de service.
Détails:
Angulaire du cadre a de la phase 2 du processus d'initialisation:
PHASE 1: Config
Au cours de l' config
de phase de tous les fournisseurs sont initialisés et tous les de la config
sections sont exécutées. L' config
articles peuvent contenir du code qui configure les objets du fournisseur et, par conséquent, ils peuvent être injectés avec des objets du fournisseur.
Toutefois, étant donné que les fournisseurs sont les usines pour les objets de service et, à ce stade, les fournisseurs ne sont pas entièrement initialisé/configuration -> on ne peut pas demander au fournisseur de créer un service pour vous à ce stade -> à l'étape de configuration vous ne pouvez pas utiliser/injecter des services.
Lorsque cette phase est terminée, tous les fournisseurs de prêt (pas de configuration du fournisseur qui peut être fait après la phase de configuration est terminé).
PHASE 2: Exécuter
Au cours run
de phase tout l' run
sections sont exécutées. À ce stade, les fournisseurs sont prêts et peuvent créer des services -> pendant run
phase, vous pouvez utiliser/injecter des services.
Exemples:
1. L'injection de l' $http
service pour le fournisseur de la fonction d'initialisation ne SERA PAS de travail
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;
};
});
Depuis que nous essayons d'injecter de l' $http
de service dans une fonction qui est exécutée lors de l' config
phase, nous avons un message d'erreur:
Uncaught Error: Unknown provider: $http from services
Ce que cette erreur est en train de dire, c'est que l' $httpProvider
qui est utilisé pour créer l' $http
service n'est pas encore prêt (puisque nous sommes encore dans l' config
de phase).
2. L'injection de l' $http
service pour le service de l'initialisation de la fonction VA travailler:
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;
};
});
Puisque nous sommes maintenant de l'injection de service dans le service à la fonction d'initialisation, qui est exécutée lors de l' run
phase de ce code fonctionne.