2012-09-18 6 views
34

A mio avviso, voglio rendere:Dove inserire le funzioni definite dall'utente in Angular JS?

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

Dove say è definito come tale:

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

posso definire nel mio controller:

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

ma poi è accessibile solo all'interno di quel controller.

Se definisco la funzione al di fuori della struttura del file Angolare, non restituisce nulla. Lo stesso se lo definisco nel mio file controllers.js, ma al di fuori dell'ambito della funzione controller.

Dove è il posto giusto dove inserire la mia funzione, così posso renderlo in qualsiasi controller?

risposta

48

Un modo è quello di create a service con le funzioni che si desidera condividere tra più controller. Vedi this post per maggiori informazioni.

Dopo lo fate in modo da poter iniettare il servizio creato in qualsiasi controller e accedere alla funzione say() con il codice di qualcosa di simile:

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

Dove definito myService come:

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

Qui è un jsFiddle con un esempio.

+0

Impressionante ... Mi aspettavo che fosse in servizio con i servizi, ma non riuscivo a trovare la sintassi per aggiungerlo in –

+5

Solo FYI, una sintassi alternativa (preferisco vedere/leggere 'servizio' invece di 'fabbrica' se ho solo bisogno di una funzione di costruzione): .service ('myService', function() { this.say = function() {return "Hello World";} }); –

+1

Il "problema" con un servizio adeguato è che ogni volta che si utilizza il servizio, si ottiene una nuova istanza di quel servizio. In questo caso potrebbe non essere la migliore idea. – Spock