Ich habe eine Factory, die die Daten von einer externen Quelle abruft. Sobald ich die Daten bekomme, benutze ich eine zweite Fabrik, um sie nach bestimmten Kriterien zu filtern.
Die Factory-Eigenschaft ist dem Bereich zugewiesen.
Wenn ich das jetzt in meiner Fabrik mache, wird der Bereich nicht aktualisiert:
%Vor%dafür funktioniert auch das filterin in einer zweiten Fabrik nicht
%Vor%solange das funktioniert:
%Vor%Hat jemand eine Idee, wenn das beabsichtigt ist und warum es so ist und wie man es löst?
%Vor% Das Problem ist, dass Ihr Werk den Verweis auf Factory.foo
ersetzt. Wenn Ihr Bereich initialisiert wird, enthält $scope.foo
einen Verweis auf ein Array (leer). Wenn Sie Foo.getDataForFoo
aufrufen, ändert es intern den Verweis auf Factory.foo
, aber Ihr Bereich enthält immer noch einen Verweis auf das vorherige Array. Dies ist der Grund, warum push
funktioniert, da es nicht die Array-Referenz, sondern den Array-Inhalt ändert.
Es gibt einige Möglichkeiten, dies zu beheben. Ohne in die verschiedenen Optionen zu gehen, ist es am einfachsten, den $scope.foo
in eine Funktion zu packen, die Factory.foo
zurückgibt. Auf diese Weise erkennt Angular eine Referenzänderung in einem Digest-Zyklus und aktualisiert die Ansicht entsprechend.
@ Simon-Belanger Antwort ist richtig und er präsentiert eine praktikable Lösung.
Eine andere Option wäre, das Array einfach zu leeren und neue Elemente hineinzuschieben (z. B. für ein Auffrischungs-Ereignis), statt die Referenz durch Zurücksetzen eines neuen Arrays zu löschen. Sie können ein Array abschneiden, indem Sie der Länge: myArray.length = 0
zuweisen, und dann können Sie über die neue Sammlung iterieren, um neue Einträge über array.push()
Tags und Links angularjs angularjs-scope angularjs-service