richtige vueJS Möglichkeit, Requisiten mit Daten zu synchronisieren

8

Betrachten Sie eine VueJS-App, mit der Blogposts angezeigt / bearbeitet werden können.

  • Beim Klicken auf "Blogpost bearbeiten" wird eine Modalität (Vue-Komponente) angezeigt, um den aktuellen Blogpost (nur ein gewöhnliches js-Objekt) zu bearbeiten.
  • Zu diesem Zweck übergebe ich den aktuellen Blogpost als prop an die Modal-Komponente.
  • Die Modal-Komponente hat ein paar Formularfelder, die mit den Blogpost-Attributen gefüllt werden sollten.
  • Der Vue-Weg besteht jedoch darin, dass ein data -Objekt in der Modal-Komponente, das als Modell zum Auffüllen der Formularfelder dient, und umgekehrt aktualisiert wird, wenn der Benutzer die Formularfelder ändert.

Das Problem: Wie verbinde ich den Blogpost, der als prop übergeben wurde, mit dem data -Feld der Modal-Komponente:

  • Der Blogpost füllt die Formularfelder
  • Der Blogpost wird beim Aktualisieren der Formularfelder aktualisiert

Wie lautet der richtige Vue-Weg, um dies zu erreichen?

    
Geert-Jan 20.07.2016, 18:07
quelle

1 Antwort

2

Sie haben drei (mindestens) Möglichkeiten, dies zu tun:

1) Verbinden Sie die Daten über das Attribut prop , so wie Sie es tun, aber fügen Sie das Attribut .sync hinzu. Wenn die Daten auf dem Formular geändert werden, wird auf diese Weise automatisch auch die Komponente geändert. Das Problem bei dieser Lösung ist, dass das Update automatisch erfolgt. Wenn also eine Validierung fehlschlägt oder der Benutzer das Modal schließt, ohne die Änderungen zu speichern, werden diese trotzdem gespeichert. Ein Beispiel: Ссылка

2) Die andere Möglichkeit besteht darin, das modale zu $dispatch ein Ereignis mit den gespeicherten Informationen zu bekommen, wenn es gespeichert wird. Das Blogpost-Element sollte auf dieses Ereignis achten und entsprechend handeln.

Auf dem Modal:

%Vor%

Auf dem Blogpost:

%Vor%

Wenn sich die Blogpost-Komponente und die modale Komponente nicht in derselben Hierarchie befinden, werden die Dinge ein wenig komplizierter, und wahrscheinlich benötigen Sie das gemeinsame Elternelement als Proxy. Denken Sie an das modal element dispatching die Information nach oben, das #app Element fängt es über $on und dann $broadcast an das blogpost Element.

3) Verwenden Sie etwas wie vuex , um als zentrales Repository des Staates zu fungieren. Ich weiß nicht, wie groß deine Bewerbung ist, aber das wäre der sauberste Weg: Ссылка

Viel Glück!

    
Hector Lorenzo 20.07.2016, 23:28
quelle

Tags und Links