webentwicklung-frage-antwort-db.com.de

Variablen von Service / Factory an Controller binden

Ich habe eine Variable, die von einem oder mehreren Controllern verwendet wird und von Services geändert wird. In diesem Fall habe ich einen Dienst erstellt, der diese Variable im Speicher behält und zwischen den Controllern gemeinsam verwendet.

Das Problem ist: Jedes Mal, wenn sich die Variable ändert, werden die Variablen in den Steuerungen nicht in Echtzeit aktualisiert.

Ich erstelle dies Fiddle um zu helfen. http://jsfiddle.net/ncyVK/

--- Notiere dass der {{countService}} oder {{countFactory}} wird nie aktualisiert, wenn ich den Wert von count erhöhe.

Wie kann ich die Service/Factory-Variable im Controller an $ scope.variable binden? Was mache ich falsch?

69

Sie können keine Variablen binden. Sie können jedoch Variablen-Accessoren oder Objekte binden, die diese Variable enthalten. Hier ist fest jsfiddle .

Grundsätzlich muss man dem Gültigkeitsbereich etwas übergeben, das den aktuellen Wert zurückgeben/oder halten kann. Z.B.

Fabrik:

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;
        }
    }               
});

Regler:

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

Aussicht:

<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

Es ist keine gute Idee, Daten aus dem Dienst zu binden, aber wenn Sie sie mehr benötigen, empfehle ich Ihnen die folgenden zwei Möglichkeiten.

1) Holen Sie sich diese Daten nicht in Ihren Dienst. Holen Sie sich Daten in Ihren Controller und Sie werden kein Problem haben, sie zu binden.

2) Sie können die Funktion AngularJs Events verwenden. Sie können sogar Daten über dieses Ereignis an senden.

Wenn Sie mehr mit Beispielen hier benötigen, ist der Artikel, der Ihnen möglicherweise helfen kann.

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

0