2014-09-15 2 views
1

J'ai quelques doutes sur les fournisseurs. Quelqu'un peut-il m'expliquer pourquoi je ne peux pas accéder depuis le contrôleur à la fonction de fournisseur "setText"? Je peux seulement accéder aux fonctions dans le bloc $ get.

var myMod = angular.module('myApp', []); 

myMod.controller("mainCtrl", [ "$scope","greeting", function($scope, greeting){ 
    greetingProvider.setText("Hi, "); 
}]); 

myMod.provider('greeting', function() { 
    var text = 'Hello, '; 

    this.setText = function(value) { 
    text = value; 
    }; 

    this.$get = function() { 
    return function(name) { 
     console.log(text + name); 
    }; 
    }; 
}); 

myMod.config(function(greetingProvider) { 
    greetingProvider.setText("Howdy there, "); 
}); 

myMod.run(function(greeting) { 
    greeting('Ford Prefect'); 
}); 

Merci

Répondre

1

La fonction setText est exposée uniquement sur votre app.config. La seule chose que vous aurez quand vous accéderez au fournisseur au sein de votre contrôleur est ce que vous avez inclus dans la fonction $ get.

Pour une réponse plus détaillée, consulter cet article:

http://tylermcginnis.com/angularjs-factory-vs-service-vs-provider/

0

Les fournisseurs ne sont accessibles que dans la phase de configuration du cycle de vie de l'application. Leur but spécifique est de fournir un moyen de configurer le futur service, lequel fournisseur doit retourner via la méthode this.$get.

Dans votre cas, il ne se sent pas vraiment besoin d'un fournisseur, un simple service (usine) aurait été suffisant. Ou vous pouvez faire usage de l'usine et ajouter une autre méthode set pour changer text variable, stockée en fermeture.