Avant de répondre à la question, nous devons noter qu'il n'y a qu'une seule instance d'injecteur par application et non par module. En ce sens, il n'est pas possible de récupérer un injecteur par module. Bien sûr, si nous prenons le module de niveau supérieur, il représente l'ensemble de l'application. En ce sens, une application et un module de niveau supérieur semblent équivalents. Cela peut sembler être une différence subtile mais il est important de comprendre cela afin de répondre pleinement et correctement à cette question.
Ensuite, de ce que je peux comprendre, vous aimeriez récupérer le $injecteur
et non en créer une nouvelle instance. Le fait est que le angular.injector
créera une nouvelle instance de $injecteur
pour les modules (une application) spécifiés en tant qu'arguments. Ici, le principal module AngularJS (ng) doit être spécifié explicitement. Donc, dans cet exemple de code :
var injector = angular.injector(['gaad', 'components']);
vous essayiez de créer un nouvel injecteur à partir des composants définis dans les modules 'gaad' et 'composants' et évidemment $compileProvider
n'est pas défini dans vos modules personnalisés. Ajouter le module ng
à la liste "résoudrait" le problème en créant un nouvel injecteur - quelque chose que vous ne voulez probablement pas qu'il se produise.
Pour réellement récupérer une instance d'injecteur associée à une application en cours d'exécution nous pouvons utiliser 2 méthodes :
Voici le jsFiddle montrant 2 méthodes de récupération de l'injecteur : http://jsfiddle.net/xaQzb/
Veuillez également noter que l'utilisation de $injecteur
directement n'est pas un scénario très courant en dehors des tests unitaires. Cela pourrait cependant être utile pour récupérer des services AngularJS en dehors du monde AngularJS. Plus d'informations ici : Appeler Angular JS à partir de code hérité.