Was ist die "unidirektionale Datenflussregel" von Angular?

8

Angulars "unidirektionale Datenflussregel" wird erwähnt mehrere times die Dokumente aber nirgendwo werden die Angular Docs jemals deutlich (Schwerpunkt auf klar ) definieren die unidirektionale Datenflussregel.

Hier sind die nächsten Dinge, die ich zu einer klaren Definition der unidirektionalen Datenflussregel finden könnte:

Von diese Seite :

  

Angulas unidirektionale Datenflussregel verbietet Aktualisierungen der Ansicht, nachdem sie zusammengesetzt wurde.

Schön genug, aber was genau bedeutet es, dass eine Ansicht komponiert wurde? Was bedeutet eine Aktualisierung der Ansicht? Aktualisieren wir nicht ständig die Ansichten?

Von diese Seite :

  

Eine wichtige Assertion [enableProdMode] deaktiviert, dass ein Änderungserkennungsdurchlauf nicht zu zusätzlichen Änderungen an Bindungen führt (auch als unidirektionaler Datenfluss bezeichnet).

Ich musste diesen Satz etwa acht Mal sehr langsam lesen und verstehe es immer noch nicht. Wenn es heißt "auch unidirektionaler Datenfluss", gehe ich davon aus, dass das, was auch als unidirektionaler Datenfluss bezeichnet wird, "dass ein Änderungserkennungs-Durchlauf keine zusätzlichen Änderungen an irgendwelchen Bindungen zur Folge hat". Okay, vielleicht kommen wir näher. Ziemlich abstrakt. Wie wäre es mit einem Beispiel oder etwas?

Diese beiden ziemlich undurchsichtigen Blökke sind all die Angular Docs, die uns anscheinend die unidirektionale Datenflussregel betreffen. Scheint nicht ausreichend.

Kann mir jemand das deutlicher erklären, am liebsten so, als wäre ich sehr dumm?

Bearbeiten : Ich habe einen dritten Hinweis auf gefunden diese Seite :

  

Ein Vorlagenausdruck sollte keinen anderen Anwendungsstatus als den Wert der Zieleigenschaft ändern.

     

Diese Regel ist für die "unidirektionale Datenfluss" -Politik von Angular von wesentlicher Bedeutung. Sie sollten sich keine Sorgen machen, dass das Lesen eines Komponentenwerts möglicherweise einen anderen angezeigten Wert ändert. Die Ansicht sollte während eines einzelnen Rendering-Durchgangs stabil sein.

Okay. Sie sollten sich keine Sorgen machen, dass das Lesen eines Komponentenwerts möglicherweise einen anderen angezeigten Wert ändert. Ist das Angulars unidirektionale Datenflussregel? Ich würde das nicht glauben, weil es nicht mit den anderen Erwähnungen der Regel übereinstimmt. Ich bin immer noch verwirrt.

    
Jason Swett 06.03.2017, 20:21
quelle

2 Antworten

3

In Angular pre v1.5 war eine bidirektionale Bindung die Norm. Wenn Sie also ein untergeordnetes Objekt in einer Komponente erstellten, pflegte das übergeordnete Element einen Verweis darauf. Wenn Sie also das Objekt im übergeordneten Element aktualisierten, wurde das untergeordnete Element aktualisiert Wenn Sie das Objekt im untergeordneten Element aktualisiert haben, wurde das übergeordnete Element aktualisiert. Dies verursachte einen erheblichen Mehraufwand, und Sie würden erhebliche Auswirkungen auf die Leistung mit einer großen Anzahl von untergeordneten Komponenten haben, die Zweiwege-Bindungen zum übergeordneten Objekt beibehalten, zum Beispiel eine übergeordnete Containerkomponente, die eine Liste von Passagierdaten lädt und für jede eine untergeordnete Komponente anzeigt Passagier mit den spezifischen Attributen für diesen Passagier. Das übergeordnete Element wird auf Änderungen überwacht, und jedes untergeordnete Element wird auf Änderungen überwacht und ständig neu bewertet.

Die One-Way-Datenbindung wurde in Angular1.5 eingeführt, ist aber ein großer Teil der Leistungsgewinne von Angular2. Daten fließen vom Elternteil zum Kind, aber nicht umgekehrt. Wenn sich die übergeordneten Daten ändern, werden diese Änderungen an das untergeordnete Element weitergegeben. Wenn sich das untergeordnete Element ändert, werden diese Änderungen jedoch nicht automatisch an das übergeordnete Element zurückgegeben. Sie verwalten Aktualisierungen vom untergeordneten Element zum übergeordneten Element, indem Sie explizit ein Ereignis mit den geänderten Daten an das übergeordnete Element zurücksenden und das übergeordnete Element anweisen, die geänderten spezifischen Daten zu aktualisieren. Der One-Way-Datenfluss übernimmt dann und das übergeordnete Element mit aktualisierten Daten aktualisiert die untergeordneten Elemente entsprechend.

    
Stephen R. Smith 06.04.2017 02:03
quelle
0

Der "unidirektionale Datenfluss" bezieht sich auf den zugrunde liegenden Änderungserkennungsprozess. Also die Antwort auf die Frage .....

  

Sie sollten sich keine Sorgen machen, dass das Lesen eines Komponentenwerts möglicherweise einen anderen angezeigten Wert ändert. Ist das die unidirektionale Datenflussregel von Angular?

...... ist ja.

Während der Änderungserkennungsphase prüft Angular, ob eine Variable, auf die in einem Ausdruck in der Vorlage verwiesen wird, geändert wurde. Wenn dies der Fall ist, wird dieser neue Wert in den HTML-Code eingefügt. Während dieser Überprüfung sollte die 'Getter'-Funktion oder der Ausdruck keine anderen Werte ändern.

Es ist der Abschnitt No Side Effects von Ссылка

Sehr guter Artikel (Thoughttram.io) Ссылка

  

Der Grund, warum Daten von oben nach unten fließen, liegt in der Veränderung   Die Erkennung wird auch immer von oben nach unten für jeden einzelnen durchgeführt   Komponente, jedes Mal, beginnend mit der Wurzel-Komponente. Dies   ist genial, da der unidirektionale Datenfluss vorhersagbarer ist als   Fahrräder. Wir wissen immer, woher die Daten in unseren Ansichten kommen,   weil es nur aus seiner Komponente resultieren kann.

     

Eine weitere interessante Beobachtung ist, dass die Änderungserkennung stabil wird   nach einem einzigen Durchgang. Das heißt, wenn eine unserer Komponenten irgendwelche verursacht   zusätzliche Nebenwirkungen nach dem ersten Durchlauf während der Änderungserkennung,   Angular wirft einen Fehler

    
Ryan 20.07.2017 07:16
quelle

Tags und Links