La méthode de chargement du service dans le contrôleur en tant que ressource de dépendance est très similaire à la méthode de le chargement dans d'autres services.
Étant donné que JavaScript est un langage dynamique, DI ne peut pas déterminer quel service doit être injecté via des types statiques (comme dans les langages typés statiques). Par conséquent, nous devons spécifier le nom du service via la propriété $ inject, qui est un tableau de chaînes contenant les noms de service qui doivent être injectés. L'importance de l'ordre d'ID de service: L'ordre des paramètres dans la méthode d'usine est cohérent avec l'ordre de service dans le tableau. Les noms des paramètres des méthodes d'usine ne sont pas importants, mais comme d'habitude, ils correspondent à l'identifiant de service un par un, et les avantages de le faire seront discutés ci-dessous.
1. Injection de dépendance explicite
fonction myController ($ scope, $ loc, $ log) {$ scope.firstMethod = function () {// Utiliser $ location service $ loc.sethash (); }; $ scope.secondMethod = function () {// Utiliser $ logariner $ log.info ('…')};} myController. $ inject = ['$ localisation', '$ log'];exemple:
<! Doctype html> <html lang = "zh-cn" ng-app = "MainApp"> <éad> <meta charset = "utf-8"> <itle> explicit-inject-service </ title> </ head> <body> <div ng-controller = "MyController"> <entrée = "text" ng-model = "msg" /> <bouton " ng-click = "SaveMsg ()"> Enregistrer msg </ bouton> <ul> <li ng-repeat = "msg in msgs"> {{msg}} </li> </ul> </v> <script src = "../ angular-1.0.1.js" type = "text / javascript"> </cript> Angular.module ("mainApp", [], fonction ($ fournis) {$ fournis.factory ("notifier", ["$ fenêtre", "$ timeout", fonction (win, timeout) {// Il s'agit d'un service dépendant du service. Grâce à cette méthode explicite, les noms de paramètres peuvent être remplis dans le hasard, mais la commande doit être correspondant à var msgs = []; return function (msg) {msgs.push); if (msgs.length == 3) {timeout (function () {win.Alert (msgs.join ("/ n"); msgs = [];}, 10);}}}]); fonction myController ($ s, $ noti) {// c'est le service dépendant du contrôleur. Grâce à cette méthode explicite, les noms de paramètres peuvent être remplis de manière aléatoire, mais l'ordre doit correspondre à $ s.msgs = []; $ s.savemsg = function () {this.msgs.push (this.msg); $ noti (this.msg); this.msg = ""; }; } // Spécifiez les trucs injectés // Vous pouvez également vous référer à l'exemple dans http://www.cnblogs.com/lclao/archive/2012/10/16/2725317.html MyController. $ Inject = ['$ Scope', 'notify'];2. Injection de dépendance implicite
Une nouvelle caractéristique d'Angular DI permet de déterminer les dépendances par les noms de paramètres. Réécrivons l'exemple ci-dessus pour montrer comment injecter implicitement la fenêtre $, $ scope et notifier le service.
exemple:
<! Doctype html> <html lang = "zh-cn" ng-app = "mainApp"> <éad> <meta charset = "utf-8"> <itle> implicite-inject-service </ title> </ head> <corps ng-click = "SaveMsg ()"> Enregistrer msg </ bouton> <ul> <li ng-repeat = "msg in msgs"> {{msg}} </li> </ul> </v> <script src = "../ angular-1.0.1.js" type = "text / javascript"> </cript> angular.module ("mainApp", [], fonction ($ fournis) {$ fournis.factory ("notify", fonction ($ window, $ timeout) {// Service dépend des services, implicitement dépend, le nom est le même var msgs = []; return function (msg) {msgs.push (msg); if (msgs.Legth == 3) {$ timeout () {) $ Windows.Alert (msgs.join (/ n "); notifier (this.msg);Bien que cela soit très pratique, si nous devons comprimer et obscurcir notre code, cela peut entraîner la modification du nom du paramètre. Dans ce cas, nous devons toujours utiliser une déclaration explicite de dépendances.
Ce qui précède est les informations sur les services d'injection d'AngularJS dans les contrôleurs. Nous continuerons d'ajouter des informations pertinentes à l'avenir. Merci pour votre soutien à ce site!