首页 > 解决方案 > 带有更新输入值的 vue 提交表单

问题描述

我有一个简单的隐藏表格

<template>
  <form ref="form" method="POST" action="https://target.com/post" accept-charset="utf-8">
    <input type="hidden" name="data" :value="myData"/>
    <input type="hidden" name="signature" v-model="mySignature" />
    <input ref="submit" type="submit">
  </form>
</template>

我希望我的方法附加到不同的按钮(v-on:click="submitForm")来提交这个表单来设置数据。

export default {
  name: 'MyComponent',
  methods: {
    submitForm() {
      // should update values for inputs
      this.myData = 'dynamically calculated';
      this.mySignature = 'creates signature from data';
      // submit the form with values above
      this.$refs.form.submit();
    },
  },
  data() {
    return {
      myData: null,
      mySignature: null,
    }
  }
}

但似乎我误解了反应性/绑定/参考?在Vue中,所以我尝试过

并且这些方法都不起作用。发送的表单带有data/的空字段signature,因此似乎变量未更新或表单无法在一个函数调用中重新呈现。进行此类更新的正确方法是什么?

标签: vue.jsvue-componentvuejs3vue-reactivityvue-render-function

解决方案


Vue 异步执行 DOM 更新。在您的情况下,表单提交之前不会发生 DOM 更新。

解决方法是使用$nextTick

this.$nextTick(() => {
    this.$refs.form.submit();
});

推荐阅读