Obwohl Angular in einigen speziellen Anwendungen viele nützliche Dienste anbietet, werden wir es als nützlich empfinden, benutzerdefinierte Dienste zu schreiben. Wenn wir dies tun möchten, müssen wir zunächst eine Service -Factory -Methode im Modul registrieren, die direkt über die Modul.Factory API (http://docs.angularjs.org/api/angular.module) oder direkt durch die API (http :/docs.angularjs.org/api/api/api/api/api/api/api/api/api/api/api/api/api/api/api) übergeben werden kann.
Alle Angular -Dienste sind an DI (//www.vevb.com/article/91775.htm) beteiligt.
1. Registrieren von Diensten
Um einen Dienst zu registrieren, müssen wir ein Modul haben und diesen Server zu einem Teil dieses Moduls machen. Anschließend können wir den Dienst über die Modul -API oder in der Modulkonfigurationsfunktion registrieren. Der folgende Pseudo-Code zeigt diese beiden Registrierungsmethoden an.
Verwenden Sie Angular.module API:
var MyModule = angular.module ('MyModule', []); MyModule.factory ('serviceId', function () {var service; // Fabrikmethode Körper, bauen someservice return someservice;});Verwenden Sie $ Service: Service:
Angular.module ('myModule', [], function ($ bereitgestellt) {$ ciplipt.factory ('serviceId', function () {var service; // Fabrikmethode Körper, bauen someservice return someservice;});});Beachten Sie, dass wir keine Serviceinstanz registrieren müssen. Stattdessen wird die Werksmethode instanziiert, wenn sie aufgerufen wird.
2. Abhängigkeiten
Der Service kann nicht nur abhängig sein, sondern auch seine eigenen Abhängigkeiten haben. Abhängigkeiten können in den Parametern der Fabrikmethode angegeben werden. Read (//www.vevb.com/article/91775.htm) Mehr über DI in Angular, die Verwendungen von Array -Tags und das $ Inject -Attribut, um DI -Deklarationen präziser zu gestalten. (Lesen Sie mehr über die DI in Angular und die Verwendung von Array-Notation und $ Inject Property, um die DI-Annotation minification-sod zu machen…)
Hier ist ein sehr einfaches Service -Beispiel. Dieser Dienst stützt sich auf $ Window -Service (über die Fabrikmethodenparameter) und hat nur eine Methode. Dieser Dienst speichert lediglich alle Benachrichtigungen, nach dem dritten wird dieser Dienst alle Benachrichtigungen über window.alert angezeigt.
<! DocType html> <html lang = "zh-cn" ng-App = "mainApp"> <kopf> <meta charset = "utf-8"> <title> dienste </title> </head> <body> <div ng-controller = "myController"> <Eingabe Typ "text" ng-model = " 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($provide) { $provide.factory("notify",["$window","$timeout",function(win,timeout) { var msgs = []; return function(msg) { msgs.push(msg); if(msgs.length==3) { timeout(function() { win.alert (msgs.join ("/n")); app.Controller ("myController", function ($ scope, melden) {$ scope.msgs = [];3.. Instantiating von Winkeldiensten
Alle Dienste in Angular sind faul instanziiert. Dies bedeutet, dass der Dienst nur dann erstellt wird, wenn andere sofortige Dienste oder Anwendungskomponenten, die davon abhängen, abhängig sind. Mit anderen Worten, Angular instanziiert den Dienst erst, wenn der Dienst direkt oder indirekt angefordert wird.
4. Dienste als Singletons
Schließlich müssen wir erkennen, dass alle Winkeldienste eine Singleton -Anwendung sind. Dies bedeutet, dass jeder Injektor und nur eine Instanz eines bestimmten Dienstes hat. Da Angular äußerst ärgerlich ist, um den globalen Zustand zu zerstören, ist es möglich, mehrere Injektoren zu erstellen, so dass jeder eine Instanz eines bestimmten Dienstes hat. Abgesehen von der starken Nachfrage bei den Tests gibt es im Allgemeinen nur wenige derartige Bedürfnisse.
Die oben genannten sind die Informationen zu Angular Services. Wir werden in Zukunft weiterhin relevante Informationen hinzufügen. Vielen Dank für Ihre Unterstützung für diese Seite!