2012-09-18 6 views
34

À mon avis, je veux rendre:Où placer les fonctions définies par l'utilisateur dans Angular JS?

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

say est défini comme tel:

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

Je peux définir dans mon contrôleur:

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

Mais il est uniquement accessible dans ce contrôleur.

Si je définis la fonction en dehors de la structure de fichier Angular, il ne restitue rien. Idem si je le définis dans mon fichier controllers.js, mais en dehors d'une portée de fonction de contrôleur.

Où est l'endroit approprié pour mettre ma fonction, donc je peux le rendre dans n'importe quel contrôleur?

Répondre

48

Une façon est de create a service avec les fonctions que vous souhaitez partager entre plusieurs contrôleurs. Voir this post pour plus d'informations.

Une fois que vous le faites, vous pouvez injecter le service que vous avez créé dans un contrôleur et d'accéder à la fonction say() avec le code comme ceci:

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

où vous avez défini myService comme:

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

ici est un jsFiddle avec un exemple.

+0

Impressionnant ... Je m'attendais à ce qu'il soit dans les services, mais ne pouvait pas trouver la syntaxe pour l'ajouter –

+5

Just FYI, une syntaxe alternative (je préfère voir/lire 'service' au lieu de 'usine' si j'ai seulement besoin d'une fonction constructeur): .service ('myService', function() { this.say = function() {return "Bonjour tout le monde";} }); –

+1

Le "problème" avec un service approprié est que chaque fois que vous utilisez le service, vous obtenez une nouvelle instance de ce service. Dans ce cas, ce n'est peut-être pas la meilleure idée. – Spock

Questions connexes