You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js 2表单提交数据重复保存问题求助

Vue表单提交重复保存至Go API的解决方案

问题根源

你遇到的重复保存问题,核心原因是表单的@submit.prevent和按钮的@click同时绑定了同一个提交方法PostDominio。由于form内的button默认类型为submit,点击按钮时会同时触发两个事件:按钮的click事件,以及表单的submit事件。哪怕你给submit加了.prevent阻止默认跳转,两个绑定的方法调用仍会执行,最终发起两次POST请求导致数据重复保存。

解决方案(二选一即可)

方案1:移除按钮的@click绑定,仅保留表单的提交事件

只通过表单的submit事件触发提交逻辑,按钮作为默认的submit按钮无需额外绑定click事件:

<template>
  <div class="row">
    <form @submit.prevent="PostDominio">
      <hr />
      <label id="lbldom">Dominio </label>
      <input v-model="form.Titulo" type="text" />
      <button
        id="sendom"
        class="btn btn-outline-primary btn-sm shadow-sm p-1 mb-1"
      >
        Gravar
      </button>
      <hr />
    </form>
  </div>
</template>

方案2:给按钮设置type="button",避免触发表单submit事件

明确将按钮标记为普通按钮,阻止其默认触发表单提交的行为,仅通过click事件调用提交方法:

<template>
  <div class="row">
    <form @submit.prevent="PostDominio">
      <hr />
      <label id="lbldom">Dominio </label>
      <input v-model="form.Titulo" type="text" />
      <button
        id="sendom"
        class="btn btn-outline-primary btn-sm shadow-sm p-1 mb-1"
        type="button"
        @click="PostDominio"
      >
        Gravar
      </button>
      <hr />
    </form>
  </div>
</template>

额外优化点

你的PostDominio方法中,.bind(this)是多余的——箭头函数catch((error) => {})已经自动绑定了组件实例的this,且axios返回的Promise调用bind无实际作用,可以移除:

PostDominio() {
  axios
    .post('http://localhost:3000/dominios', this.form)
    .catch((error) => {
      console.log(error)
    })
}

内容的提问来源于stack exchange,提问作者David Borges

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:25:21