Si tengo una función de utilidad foo
que quiero poder llamar desde cualquier lugar dentro de mi ng-app
declaración. ¿Hay alguna manera de hacer que sea accesible globalmente en la configuración de mi módulo o necesito agregarlo al alcance en cada controlador?
191
module.value('myFunc', function(a){return a;});
y luego inyectarlo por nombre en sus controladores. (Si uno quiere evitar hacer un servicio)Respuestas:
Básicamente tiene dos opciones, definirlo como un servicio o colocarlo en su ámbito raíz. Te sugiero que hagas un servicio fuera de él para evitar contaminar el alcance raíz. Crea un servicio y lo pone a disposición en su controlador de la siguiente manera:
Si esa no es una opción para usted, puede agregarla al alcance raíz de esta manera:
De esa manera, todas sus plantillas pueden llamar
globalFoo()
sin tener que pasarlas a la plantilla desde el controlador.fuente
foo()
funciones? Hacer un$scope.callFoo()
envoltorio para cada uno de ellos es demasiado trabajo. ¿Cómo puedo "adjuntar" todas las funciones de una biblioteca al alcance para que pueda usarse en la plantilla? Tengo una gran biblioteca de conversión de unidades que quiero que esté disponible en mi plantilla.$scope.callFoo = myService.foo;
en lugar de crear un nuevo contenedor en cada lugar que quieras usar.También puedes combinarlos, supongo:
fuente
$rootScope
?Aunque el primer enfoque se defiende como el enfoque 'como el angular', creo que esto agrega gastos generales.
Considere si quiero usar esta función myservice.foo en 10 controladores diferentes. Tendré que especificar esta dependencia 'myService' y luego la propiedad de alcance $ scope.callFoo en las diez. Esto es simplemente una repetición y de alguna manera viola el principio DRY.
Mientras que, si uso el enfoque $ rootScope, especifico esta función global gobalFoo solo una vez y estará disponible en todos mis futuros controladores, sin importar cuántos.
fuente
AngularJs tiene " Servicios " y " Fábricas " solo para problemas como el suyo. Se utilizan para tener algo global entre Controladores, Directivas, Otros Servicios o cualquier otro componente angularjs. Puede definir funciones, almacenar datos, realizar funciones de cálculo o lo que sea querer dentro de Servicios y usarlos en AngularJs Components como Global .like
si necesitas mas
Encuentre más sobre por qué necesitamos los servicios y las fábricas de AngularJs
fuente
Soy un poco más nuevo en Angular, pero lo que me pareció útil (y bastante simple) es que hice un script global que cargo en mi página antes del script local con variables globales a las que necesito acceder en todas las páginas de todos modos. En ese script, creé un objeto llamado "globalFunctions" y agregué las funciones a las que necesito acceder globalmente como propiedades. por ej
globalFunctions.foo = myFunc();
. Luego, en cada script local, escribí$scope.globalFunctions = globalFunctions;
e instantáneamente tengo acceso a cualquier función que agregué al objeto globalFunctions en el script global.Esta es una solución alternativa y no estoy seguro de que te ayude, pero definitivamente me ayudó, ya que tenía muchas funciones y fue una molestia agregarlas todas en cada página.
fuente