Die Methode zum Laden des Dienstes in den Controller als Abhängigkeitsressource ist der Methode zum Laden in andere Dienste sehr ähnlich.
Da JavaScript eine dynamische Sprache ist, kann DI nicht herausfinden, welcher Service durch statische Typen injiziert werden sollte (wie in statischen typisierten Sprachen). Daher müssen wir den Dienstnamen über die $ Inject -Eigenschaft angeben, bei der es sich um eine Reihe von Zeichenfolgen handelt, die die Dienstnamen enthalten, die injiziert werden müssen. Die Bedeutung der Service -ID -Reihenfolge: Die Reihenfolge der Parameter in der Fabrikmethode steht im Einklang mit der Reihenfolge des Dienstes im Array. Die Parameternamen der Fabrikmethoden sind nicht wichtig, aber wie immer entsprechen sie der Service -ID nacheinander, und die Vorteile dessen werden nachstehend erörtert.
1. Explizite Abhängigkeitsinjektion
Funktion MyController ($ scope, $ loc, $ log) {$ scope.firstMethod = function () {// $ location Service $ loc.sethash (); }; $ scope.secondMethod = function () {// $ log Service $ log.info ('…')};} MyController.Beispiel:
<! DocType html> <html lang = "zh-cn" ng-App = "mainApp"> <kopf> <meta charset = "utf-8"> <title> explizites Injektionsdienst </title> </head> <body> <div ng-controller = "mycontroller" </type "text" text " ng-click="saveMsg()">save msg</button> <ul> <li ng-repeat="msg in msgs">{{msg}}</li> </ul></div><script src="../angular-1.0.1.js" type="text/javascript"></script><script type="text/javascript"> var app = Angular.module ("mainApp", [], function ($ bereitgestellt) {$ ciplice.factory ("Benachrichtigung", ["$ window", "$ timeout", function (win, timeout) {// Dies ist ein Service-abhängiger Service. Durch diese explizite Methode können die Parameternamen zufällig ausgefüllt werden, aber der Auftrag muss dem Auftrag entsprechen, dass var msgs =; if (msgs.Length == 3) {timeout (function () {win.alert (msgs.join ("/n"); msgs = [];}, 10); Funktion MyController ($ S, $ Noti) {// Dies ist der Controller -abhängige Dienst. Durch diese explizite Methode können die Parameternamen zufällig ausgefüllt werden, aber die Reihenfolge muss $ s.msgs = [] entsprechen. $ S.Savemsg = function () {this.msgs.push (this.msg); $ Noti (this.msg); this.msg = ""; }; } // Geben Sie das injizierte Zeug an // Sie können sich auch auf das Beispiel unter http://www.cnblogs.com/lclao/archive/2012/10/16/2725317.html MyController.2. Implizite Abhängigkeitsinjektion
Ein neues Merkmal von Angular DI, mit dem Abhängigkeiten durch Parameternamen bestimmt werden können. Schreiben wir das obige Beispiel neu, um zu zeigen, wie $ $ fester, $ scope und benachrichtigen Sie den Service implizit injizieren können.
Beispiel:
<! DocType html> <html lang = "zh-cn" ng-App = "mainApp"> <kopf> <meta charset = "utf-8"> <title> Implicit Inject-Service </title> </head> <Body> <div ng-controller = "mycontroller"> </head> <bodel "ng-model =" mycontroller "> <input" tection = "text" text " ng-click="saveMsg()">save msg</button> <ul> <li ng-repeat="msg in msgs">{{msg}}</li> </ul></div><script src="../angular-1.0.1.js" type="text/javascript"></script><script type="text/javascript"> var app = Angular.module ("mainApp", [], function ($ bereitgestellt) {$ ciplice.factory ("Benachrichtigung", Funktion ($ Fenster, $ timeout) {// Dienst hängt von Diensten ab, implizit abhängig, der Name ist dieselbe var msgs = []; Rückkehrfunktion (msg) {msgs.push (msg); wenn (msgs. $ windy.alert (msgs.join ("/n"); melden (this.msg);Obwohl dies sehr bequem ist, kann dies dazu führen, dass der Parametername geändert wird, wenn wir unseren Code komprimieren und verschleiern müssen. In diesem Fall müssen wir noch eine explizite Abhängigkeitserklärung verwenden.
Die oben genannten Informationen über AngularJs injizieren Dienste in Controller. Wir werden in Zukunft weiterhin relevante Informationen hinzufügen. Vielen Dank für Ihre Unterstützung für diese Seite!