web-dev-qa-db-fra.com

Liaison de variables de Service / Factory aux contrôleurs

J'ai une variable qui sera utilisée par un ou plusieurs contrôleurs, modifiée par les services. Dans ce cas, j'ai créé un service qui conserve cette variable en mémoire et le partage entre les contrôleurs.

Le problème est le suivant: chaque fois que la variable change, les variables des contrôleurs ne sont pas mises à jour en temps réel.

Je crée ceci Fiddle pour aider. http://jsfiddle.net/ncyVK/

--- Notez que le {{countService}} ou {{countFactory}} n'est jamais mis à jour lorsque j'incrémente la valeur count.

Comment puis-je lier la variable Service/Factory à $ scope.variable dans le contrôleur? Qu'est-ce que je fais mal?

69
Deividi Cavarzan

Vous ne pouvez pas lier des variables. Mais vous pouvez lier des accesseurs de variables ou des objets contenant cette variable. Ici est fixé jsfiddle .

Fondamentalement, vous devez transmettre quelque chose à la portée, qui peut renvoyer/ou conserver la valeur actuelle. Par exemple.

Usine:

app.factory('testFactory', function(){
    var countF = 1;
    return {
        getCount : function () {

            return countF; //we need some way to access actual variable value
        },
        incrementCount:function(){
           countF++;
            return countF;
        }
    }               
});

Manette:

function FactoryCtrl($scope, testService, testFactory)
{
    $scope.countFactory = testFactory.getCount; //passing getter to the view
    $scope.clickF = function () {
        $scope.countF = testFactory.incrementCount();
    };
}

Vue:

<div ng-controller="FactoryCtrl">

    <!--  this is now updated, note how count factory is called -->
    <p> This is my countFactory variable : {{countFactory()}}</p>

    <p> This is my updated after click variable : {{countF}}</p>

    <button ng-click="clickF()" >Factory ++ </button>
</div>
117
jusio

Ce n'est pas une bonne idée de lier des données du service, mais si vous en avez plus besoin, je vous suggère ces deux manières.

1) Récupérez ces données hors de votre service. Récupérez des données à l'intérieur de votre contrôleur et vous n'aurez aucun problème pour les lier.

2) Vous pouvez utiliser la fonction Evénements AngularJs. Vous pouvez même envoyer des données via cet événement.

Si vous avez besoin de plus d'exemples, voici l'article qui peut peut-être vous aider.

http://www.w3docs.com/snippets/angularjs/bind-value-between-service-and-controller-directive.html

0
Hazarapet Tunanyan