Bien qu'Angular fournit de nombreux services utiles, dans certaines applications spéciales, nous trouverons utile d'écrire des services personnalisés. Si nous voulons le faire, nous devons d'abord enregistrer une méthode d'usine de service dans le module, qui peut être directement transmise via l'API module.factory (http://docs.angularjs.org/api/angular.module) ou directement transmis par l'API (http://docs.angularjs.org/api/auto.
Tous les services angulaires sont impliqués dans DI (//www.vevb.com/article/91775.htm), vous pouvez soit vous inscrire au nom (ID) du système Angular Di (injecteur), soit déclarer les dépendances sur les services existants dans d'autres méthodes d'usine.
1. Les services d'enregistrement
Afin d'enregistrer un service, nous devons avoir un module et faire de ce serveur une partie de ce module. Ensuite, nous pouvons enregistrer le service via l'API du module ou dans la fonction de configuration du module. Le pseudo-code suivant montrera ces deux méthodes d'enregistrement.
Utilisez Angular.Module API:
var mymodule = angular.module ('mymodule', []); mymodule.factory ('serviceId', function () {var someservice; // Méthode d'usine Body, construire soméservice return someservice;});Utiliser $ fournir un service:
angular.module ('mymodule', [], function ($ fournis) {$ fournit.factory ('serviceId', function () {var someservice; // Méthode d'usine Body, build someservice return someservice;});});Notez que nous n'avons pas besoin d'enregistrer une instance de service, mais la méthode d'usine sera instanciée lorsqu'elle sera appelée.
2. Dépendances
Le service peut non seulement être dépendant, mais aussi avoir ses propres dépendances. Les dépendances peuvent être spécifiées dans les paramètres de la méthode d'usine. Lire (//www.vevb.com/article/91775.htm) plus sur DI dans Angular, les utilisations des balises de tableau et l'attribut $ inject pour rendre les déclarations DI plus concises. (En savoir plus sur le DI dans Angular et l'utilisation de la notation du tableau et de la propriété $ injecter pour rendre DI Annotation Minification à l'épreuve…)
Voici un exemple de service très simple. Ce service s'appuie sur $ Window Service (passé par les paramètres de la méthode d'usine) et n'a qu'une seule méthode. Ce service stocke simplement toutes les notifications, après la troisième, ce service affichera toutes les notifications via Window.Alert.
<! Doctype html> <html lang = "zh-cn" ng-app = "mainApp"> <ead> <meta charset = "utf-8"> <itle> Services </ title> </ head> <body> <div ng-controller = "MyController"> <entrée type = "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 ("notify", ["$ window", "$ timeout", function (win, timeout) {var msgs = []; return function (msg) {msgs.push (msg); if (msgs.Length == 3) {timeout (fonction () {) win.Alert (msgs.join ("/ n"); app.Controller ("myController", fonction ($ scope, notify) {$ scope.msgs = []; $ scope.savemsg = function () {this.msgs.push (this.msg); notify (this.msg); this.msg = "";};});3. Instanciation des services angulaires
Tous les services en angulaire sont instanciés paresseusement. Cela signifie que le service n'est créé que lorsque d'autres services instanciés ou composants d'application qui en dépendent dépendent. En d'autres termes, Angular n'instanciera pas le service tant que le service ne sera pas demandé directement ou indirectement.
4. Services en singletons
Enfin, nous devons réaliser que tous les services angulaires sont une application singleton. Cela signifie que chaque injecteur a et une seule instance d'un service donné. Étant donné qu'Angular est extrêmement ennuyeux de détruire l'état global, il est possible de créer plusieurs injecteurs afin que chacun ait une instance d'un service spécifié. À l'exception de la forte demande des tests, il y a généralement peu de besoins de ce type.
Ce qui précède est les informations sur les services angulaires. Nous continuerons d'ajouter des informations pertinentes à l'avenir. Merci pour votre soutien à ce site!