Nous avons eu besoin de surcharger un provider AngularJS – AnalyticsProvider – pour le rendre configurable dynamiquement en fonction d’un paramètre de la route. Le service $route
n’étant pas disponible dans la phase de configuration d’AngularJS, il a fallu ruser…
Le but est donc de changer la méthode $get
de ce provider afin de lui ajouter notre dépendance et ainsi finir notre configuration.
Il existe bien une méthode decorator()
dans le service d’injection de dependance d’AngularJS, mais celle-ci ne permet que de décorer des services et pas leurs providers.
Nous allons donc mettre les mains dans l’$injector
pour récupérer et modifier à la volée le provider :
Maintenant que nous avons le $get
, il faut le modifier pour ajouter notre dépendance. Et c’est assez simple vu qu’il utilise l’annotation sous forme de tableau :
Nous devons modifier ce tableau en ajoutant nos dépendances et en remplaçant la fonction :
On peut noter l’utilisation de l’objet arguments
qui permet de rester générique et de garder la compatibilité en cas de changement des dépendances du module surchargé.
Grâce à cette astuce, notre service Analytics
est maintenant configuré dynamiquement selon nos souhaits avant son utilisation.