Скажем, у меня есть простой компонент, в котором нет ничего, кроме метода mounted
который выполняет следующие действия:
this.myValue = 'a value'
$(this.$el).parent('form').submit()
Мой компонент html выглядит так:
<form action="http://…">
<input type="text" :value="myValue">
</form>
Как видите, я использую jQuery для отправки формы, и если и присвоение значения, и отправка формы происходят в одной и той же функции, отправляются __empty data__. Я могу обойти это, используя тайм-аут без задержки, но, конечно, это не идеально.
setTimeout(() => {
$(this.$el).parent('form').submit()
})
Это также происходит, когда он не в смонтированном методе, а, например, on blur out
, поэтому он не имеет ничего общего с загрузкой страницы или задержками. То же самое касается :value
сравнению с v-model
.
Я не очень разбираюсь во внутреннем устройстве Vue или JS, но предполагаю, что это потому, что он еще не смог присвоить значения. При использовании тайм-аута отправка происходит на следующем тике.
Думал, что нет способа решить проблему.
В этой ситуации я вручную записываю значение параметра для ajax.
Публикуется ли эта проблема раньше? Ничего не нашел.
Что ж, в моем случае я просто хочу отправить форму автоматически, включая обновление страницы, не хочу (и не могу) отправлять ее через Ajax. Если решения нет, возможно, было бы неплохо сделать упоминание в документации?
Используйте vm. $ NextTick
this.myValue = 'a value'
this.$nextTick(function () {
$(this.$el).parent('form').submit()
})
Самый полезный комментарий
Используйте vm. $ NextTick