Aunque Angular proporciona muchos servicios útiles, en algunas aplicaciones especiales, nos resultará útil escribir servicios personalizados. Si queremos hacer esto, primero necesitamos registrar un método de fábrica de servicios en el módulo, que se puede pasar directamente a través del módulo.factory API (http://docs.angularjs.org/api/angular.module) o pasar directamente a través del método de configuración de Module (http://doc.angularjs.org/api/Api/AUTO
Todos los servicios angulares están involucrados en DI (//www.vevb.com/article/91775.htm), puede registrarse con el nombre (ID) en el sistema angular DI (inyector) o declarar dependencias de los servicios existentes en otros métodos de fábrica.
1. Servicios de registro
Para registrar un servicio, debemos tener un módulo y hacer de este servidor una parte de este módulo. Luego, podemos registrar el servicio a través de la API del módulo o en la función de configuración del módulo. El siguiente código de pseudo mostrará estos dos métodos de registro.
Use angular.module API:
var mymodule = angular.module ('mymodule', []); mymodule.factory ('servicioid', function () {var someservice; // Método de fábrica Cuerpo, construir someservice return someservice;});Use $ proporcionar servicio:
angular.module ('mymodule', [], function ($ proporcione) {$ prop.Tenga en cuenta que no necesitamos registrar una instancia de servicio, en cambio, el método de fábrica se instanciará cuando se llame.
2. Dependencias
El servicio no solo puede depender, sino que también tiene sus propias dependencias. Las dependencias se pueden especificar en los parámetros del método de fábrica. Lea (//www.vevb.com/article/91775.htm) Más sobre DI en Angular, los usos de las etiquetas de matriz y el atributo $ inyectos para hacer que las declaraciones DI sean más concisas. (Lea más sobre el DI en Angular y el uso de la notación de matriz y la propiedad $ inyección para hacer a prueba de minificación de anotación ...)
Aquí hay un ejemplo de servicio muy simple. Este servicio se basa en el servicio $ Window (pasada a través de parámetros del método de fábrica), y solo tiene un método. Este servicio simplemente almacena todas las notificaciones, después del tercero, este servicio mostrará todas las notificaciones a través de Window.alert.
<! Doctype html> <html lang = "zh-cn" ng-app = "mainapp"> <head> <meta charset = "utf-8"> <title> Services </title> </head> <body> <div ng ng-concontroller 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 ($ proporcion) {$ proporcion.factory ("notificar", ["$ 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, notify) {$ scope.msgs = []; $ scope.savemsg = function () {this.msgs.push (this.msg); notificar (this.msg); this.msg = "";};}); </script> </body> </html>3. Instanciación de servicios angulares
Todos los servicios en Angular tienen una instancia perezosamente. Esto significa que el servicio se crea solo cuando otros servicios instanciados o componentes de la aplicación que dependen de él dependen de él. En otras palabras, Angular no instanciará el servicio hasta que el servicio se solicite directa o indirectamente.
4. Servicios como singletons
Finalmente, debemos darnos cuenta de que todos los servicios angulares son una aplicación singleton. Esto significa que cada inyector tiene y solo una instancia de un servicio determinado. Dado que Angular es extremadamente molesto para destruir el estado global, es factible crear múltiples inyectores para que cada uno tenga una instancia de un servicio específico. A excepción de la fuerte demanda en las pruebas, generalmente hay pocas necesidades de este tipo.
Lo anterior es la información sobre los servicios angulares. Continuaremos agregando información relevante en el futuro. ¡Gracias por su apoyo para este sitio!