Disons que j'ai un composant simple avec rien d'autre qu'une méthode mounted
qui fait ce qui suit :
this.myValue = 'a value'
$(this.$el).parent('form').submit()
Mon composant html ressemble à ceci :
<form action="http://…">
<input type="text" :value="myValue">
</form>
Comme vous pouvez le voir, j'utilise jQuery pour soumettre le formulaire et si l'attribution de la valeur et la soumission du formulaire se produisent dans la même fonction, __des données vides sont soumises__. Je peux contourner ce problème en utilisant un délai d'attente sans délai, mais bien sûr, ce n'est pas idéal.
setTimeout(() => {
$(this.$el).parent('form').submit()
})
Cela se produit également lorsque ce n'est pas dans la méthode montée, mais par exemple on blur out
, donc cela n'a rien à voir avec le chargement de la page ou les retards. Il en va de même pour :value
contre v-model
.
Je ne connais pas grand-chose des éléments internes de Vue ou de JS, mais je suppose que c'est parce qu'il n'a pas encore été en mesure d'attribuer les valeurs. En utilisant un délai d'attente, la soumission se produit au prochain tick.
Je pensais qu'il n'y avait aucun moyen de résoudre le problème.
Dans cette situation, j'écris manuellement la valeur de param pour ajax.
Ce problème a-t-il déjà été posté ? Je n'ai rien trouvé.
Eh bien, dans mon cas, je veux juste soumettre le formulaire automatiquement, y compris l'actualisation de la page, je ne veux pas (et je ne peux pas) l'envoyer via Ajax. S'il n'y a pas de solution, peut-être qu'une mention dans la doc serait bien d'avoir ?
Utiliser vm.$nextTick
this.myValue = 'a value'
this.$nextTick(function () {
$(this.$el).parent('form').submit()
})
Commentaire le plus utile
Utiliser vm.$nextTick