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

Vue.js使用Buefy构建动态表单 如何获取输入值提交至后端

问题解决方法

核心问题根因

你目前的自定义Input、Select组件没有适配Vue的v-model双向绑定规则,所以父组件写的v-model="element.fieldValue"不会生效,fieldValue不会跟着输入操作同步更新。

修复步骤

1. 修改Input.vue组件适配v-model

Vue2中自定义组件支持v-model需要满足两个条件:

  • 接收名为value的prop
  • 值变化时向外触发input事件,携带最新值

修改后的Input.vue代码如下:

<template>
  <b-field :label="fieldLabel">
    <b-input
      :name="inputName"
      :type="inputType"
      :maxlength="inputType == 'textarea' ? 200 : null"
      :value="value"
      @input="$emit('input', $event)"
    ></b-input>
  </b-field>
</template>
<script>
export default {
  name: "Input",
  props: {
    // 新增value prop接收父组件v-model传的值
    value: {
      type: [String, Number],
      default: ""
    },
    inputType: {
      type: String,
      required: true,
      default: "text",
    },
    inputName: {
      type: String,
      required: true,
    },
    fieldLabel: {
      type: String,
      required: true,
    }
  }
};
</script>

2. 同理修改Select.vue组件适配v-model

按照同样规则修改Select组件即可,示例逻辑如下:

<template>
  <b-field :label="fieldLabel">
    <b-select
      :name="selectName"
      :options="options"
      :value="value"
      @input="$emit('input', $event)"
    ></b-select>
  </b-field>
</template>
<script>
export default {
  name: "Select",
  props: {
    value: {
      type: [String, Number],
      default: ""
    },
    options: {
      type: Array,
      required: true
    },
    selectName: {
      type: String,
      required: true
    },
    fieldLabel: {
      type: String,
      required: true
    }
  }
}
</script>

3. 优化Home.vue的提交逻辑

修改完组件后,你所有输入、选择的内容都会自动同步到offer数组对应项的fieldValue属性中。在getOffer方法中可以直接提取参数提交给后端,示例代码:

getOffer() {
  // 把offer数组转成后端需要的键值对格式
  const submitParams = this.offer.reduce((params, item) => {
    params[item.fieldName] = item.fieldValue
    return params
  }, {})
  // 提交请求示例
  axios.post('/你的后端提交接口地址', submitParams)
    .then(res => {
      // 提交成功后的业务逻辑
    })
    .catch(err => {
      // 错误提示逻辑
    })
}

另外你现在Home.vue中给组件同时写了v-model和:value是冗余的,去掉:value="element.fieldValue"即可,v-model已经包含了值绑定的逻辑。


内容的提问来源于stack exchange,提问作者İ.Emre Akbaki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:39:06