2012-09-18 56 views
34

En mi opinión, quiero hacer:¿Dónde ubicar las funciones definidas por el usuario en Angular JS?

<p> 
    {{ say() }} 
</p> 

Dónde say se define como tal:

say = function() { 
    return "Hello World"; 
} 

puedo definirlo en mi regulador:

function TestCtrl($scope) { 
    $scope.say = function() { ... }; 
} 

Pero entonces es solo accesible dentro de ese controlador.

Si defino la función fuera de la estructura de archivos Angular, no muestra nada. Lo mismo si lo defino en mi archivo controllers.js, pero fuera de un ámbito de función de controlador.

¿Dónde está el lugar adecuado para poner mi función, así que puedo representarla en cualquier controlador?

Respuesta

48

Una forma es create a service con las funciones que desea compartir en varios controladores. Ver this post para más información.

Después de hacerlo, puede inyectarse el servicio que creó en cualquier controlador y acceder a la función say() con el código de algo como esto:

function TestCtrl($scope, myService){ 
    $scope.say = myService.say; 
} 

Cuando haya definido myService como:

angular.module('myApp', []) 
    .factory('myService', function() { 
     return { 
      say: function() { 
       return "Hello World"; 
      } 
     } 
    }); 

Aquí es un jsFiddle con un ejemplo.

+0

Impresionante ... esperaba que fuera con los servicios, pero no pude encontrar la sintaxis para agregarlo en –

+5

Solo FYI, una sintaxis alternativa (prefiero ver/leer 'servicio' en lugar de 'fábrica' si solo necesito una función de constructor): .service ('myService', function() { this.say = function() {return "Hello World";} }); –

+1

El "problema" con un servicio adecuado es que cada vez que utiliza el servicio, obtiene una nueva instancia de ese servicio. En este caso, puede que no sea la mejor idea. – Spock

Cuestiones relacionadas