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
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:
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;
:
Ihr gegabelter Plünderer zur Veranschaulichung.
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%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
Tags und Links angularjs angularjs-directive angularjs-scope