una tipos pasar parametros funciones funcion entre ejemplos ejemplo desde autoejecutables javascript angularjs web angularjs-service

tipos - prompt javascript ejemplo



Creando funciones de controlador comunes (2)

¿Cómo creo algún tipo de paquete de utilidades que sea accesible desde todos mis controladores?

Tengo este código de ruta en mi módulo principal:

''use strict''; angular.module(''lpConnect'', []). config([''$routeProvider'', function($routeProvider) { $routeProvider. when(''/home'', {template: ''views/home.html'', controller: HomeCtrl}). when(''/admin'', {template: ''views/admin.html'', controller: AdminCtrl}). when(''/connect'', {template: ''views/fb_connect.html'', controller: MainAppCtrl}). otherwise({redirectTo: ''/connect''}); }]);

Quiero una función que pueda ser común para HomeCtrl , AdminCtrl y MainAppCtrl .

¿Cómo debería hacerlo en AngularJS?


La forma de definir un código común en angular es a través de Servicios.

Definirías un nuevo servicio así:

.factory(''CommonCode'', function ($window) { var root = {}; root.show = function(msg){ $window.alert(msg); }; return root; });

En tu controlador deberías inyectar este servicio ... como

function MainAppCtrl($scope,CommonCode) { $scope.alerter = CommonCode; $scope.alerter.show("Hello World"); }

Simplemente incluya CommonCode como argumento para su función de controlador. Angular se encargará de inyectarlo por usted (Leer en Inyección de Dependencia ... para comprender lo que está sucediendo aquí).


Solo para actualizar la respuesta anterior (que solo define qué factory es), hay 3 formas de inyectar dependencias (definir código común) en AngularJS:

  • Proveedores
  • Suerte
  • Servicios

No hablaré mucho sobre el proveedor porque es un método más laborioso para la inyección de dependencia. Sin embargo, esta página explica muy bien cómo funcionan.

Técnicamente, el servicio y la fábrica se utilizan para lo mismo. Resulta que un servicio es una función constructora mientras que una fábrica no lo es.

De esta publicación :

module.service( ''serviceName'', function );

Al declarar serviceName como un argumento inyectable, se le proporcionará una instancia de la función .

module.factory( ''factoryName'', function );

Al declarar factoryName como un argumento inyectable, se le proporcionará el valor que se devuelve invocando la referencia de función pasada a module.factory.

Puede usar el que prefiera y obtener el mismo resultado .

Aquí hay dos códigos que hacen exactamente lo mismo a través del service primero y luego de factory :

Sintaxis del servicio

app.service(''MyService'', function () { this.sayHello = function () { console.log(''hello''); }; });

Sintaxis de fábrica

app.factory(''MyService'', function () { return { sayHello: function () { console.log(''hello''); } } });