AngularJs: Warum wird der Bereich innerhalb meiner Direktive nicht aktualisiert, wenn asynchrone Daten eintreffen?

8

Ich habe eine Direktive mit isolieren Bereich, der eine Bereichsvariable durch Verweis

nimmt %Vor%

Dies wird wie folgt übergeben:

%Vor%

Im externen Controller werden Daten asynchron geladen und die in die Direktive übernommenen Scope-Items aktualisiert:

%Vor%

Wenn die Daten geladen werden, wird der Bereich außerhalb meiner Direktive aktualisiert, aber im Inneren nicht

Mein html:

%Vor%

Wie kann ich meinen Bereich innerhalb meiner Direktive aktualisieren? Tu ich

Plunker hier

    
Steve Lorimer 14.11.2014, 23:52
quelle

3 Antworten

4

Wenn Angular zuerst die Controller-Funktion Ihrer Anweisung ausführt, geben Sie $scope.items === undefined an. Wenn Sie also this.items = $scope.items ausführen, wird auch Ihre this.items === undefined angezeigt.

Das ist es. Danach ändert nichts this.items .

Dies ist ungleich $scope.items . $scope.items ist in zwei Richtungen an den äußeren Bereich gebunden. Wenn Angular also eine Änderung extern erkennt, wird die isolierte Bereichsvariable festgelegt.

Der einfachste Weg (und meiner Meinung nach am besten geeignet) ist, die Eigenschaft $scope direkt in der Direktive zu verwenden:

%Vor%

Wenn Sie Ihren Controller als ViewModel anstelle von scope verwenden möchten (ich weiß nicht, warum Sie das tun würden), könnten Sie Folgendes tun:

%Vor%

BEARBEITEN:

In Angular 1.3 können Sie auch bindToController: true in der Definition der Direktive tun, so dass die Controller-Eigenschaft " items " die bidirektionale Bindung erhält, die $scope.items bekommt. Dann müssen Sie nicht einmal this.items = $scope.items; :

eingeben

Ihr gegabelter Plünderer zur Veranschaulichung.

    
New Dev 15.11.2014, 08:02
quelle
3

Wenn es sich um einen isolierten Bereich handelt, können Sie nicht ändern, was in der Direktive enthalten ist, nachdem Sie eine separate Variable innerhalb des Anweisungs-Controllers erstellt haben.

Hier ist der aktualisierte Plocker, der den Controller für die Direktive entfernt.

%Vor%     
Alan Souza 15.11.2014 00:02
quelle
1

Versuchen Sie, Ihre Objekte in ein Objekt zu legen. Siehe dieses Beispiel bei Plunker

index.html

%Vor%

directive.js:

%Vor%

template.html:

%Vor%

script.js:

%Vor%

Hier gibt es eine bessere Erklärung:

Angular - ngModel wird nicht aktualisiert, wenn es innerhalb von ngInclude aufgerufen wird

    
Speedy059 15.11.2014 00:04
quelle