Vue: Formularwertbindung wird nicht schnell genug aktualisiert

Erstellt am 20. Dez. 2016  ·  3Kommentare  ·  Quelle: vuejs/vue

Angenommen, ich habe eine einfache Komponente mit nichts als einer mounted Methode, die Folgendes tut:

this.myValue = 'a value'

$(this.$el).parent('form').submit()

Mein Komponenten-HTML sieht so aus:

<form action="http://…">
    <input type="text" :value="myValue">
</form>

Wie Sie sehen, verwende ich jQuery zum Senden des Formulars. Wenn sowohl das Zuweisen des Werts als auch das Senden des Formulars in derselben Funktion erfolgen, werden __leere Daten gesendet__. Ich kann dies umgehen, indem ich ein Timeout ohne Verzögerung verwende, aber das ist natürlich nicht ideal.

setTimeout(() => {
    $(this.$el).parent('form').submit()
})

Dies passiert auch, wenn es sich nicht in der gemounteten Methode befindet, sondern beispielsweise on blur out , hat also nichts mit Seitenladen oder Verzögerungen zu tun. Das gleiche gilt für :value Vergleich zu v-model .

Ich weiß nicht viel über die Interna von Vue oder JS, aber ich vermute, es liegt daran, dass es die Werte noch nicht zuweisen konnte. Bei Verwendung eines Timeouts erfolgt die Übermittlung beim nächsten Tick.

Hilfreichster Kommentar

Verwenden Sie vm.$nextTick

this.myValue = 'a value'

this.$nextTick(function () {
  $(this.$el).parent('form').submit()
})

Alle 3 Kommentare

Ich dachte, es gibt keine Möglichkeit, das Problem zu lösen.

In dieser Situation schreibe ich den Wert von param für Ajax manuell.

Wurde dieses Problem schon früher gepostet? Konnte nichts finden.

Nun, in meinem Fall möchte ich das Formular nur automatisch einschließlich der Seitenaktualisierung absenden, möchte (und kann) es nicht über Ajax senden. Wenn es keine Lösung gibt, wäre vielleicht eine Erwähnung in den Dokumenten wünschenswert?

Verwenden Sie vm.$nextTick

this.myValue = 'a value'

this.$nextTick(function () {
  $(this.$el).parent('form').submit()
})
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen