Vue只提交表单中被修改的部分

需求

在提交表单使用http的put请求进行数据更新时,只提交表单中被修改的数据,而不是提交整个表单

解决

  • 获取表单数据时clone一份作为原始数据rawData
  • 在提交表单前将表单数据 formData 和 rawData 的数据进行比较
  • 将差异存放到新的对象 diffData 中,在提交表单时提交就行了

实现(部分代码)

template中的代码

<template>
  <el-form ref="formRef" :model="form">
    <el-form-item label="用户名">
      <el-input v-model="form.username"></el-input>
     </el-form-item>
    <el-form-item label="地址">
      <el-input v-model="form.address"></el-input>
    </el-form-item>
    <el-form-item label="手机号码">
      <el-input v-model="form.phone"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button @click="updateInfo">保存修改</el-button>
    </el-form-item>
  </el-form>
</template>

script中的代码

<script>
export default {
  data () {
    return {
      form: {},		// 表单数据
      rawData: '',	// 获取表单时clone的原始数据
      diffData: ''	// 差异
    }
  },
  created () {
    this.getFormData()
  },
  methods: {
    // 获取数据的方法
    async getFormData () {
      const { data: res } = await this.$http.get('user')
      ..........
      this.form = res.data              // 表单数据
      this.rawData = { ...res.data }    // 原始数据
    },
    // 比较差异的方法
    diffFormData () {
      for (let k in this.rawData) {
        if (this.rawData[k] !== this.form[k]) {
          if (!this.diffData) {
            this.diffData = {}
          }
          this.diffData[k] = this.form[k]
        }
      }
    },
    // 提交更新数据的方法
    updateInfo () {
      //先比对差异赋值给diffData,如果diffData为空则不用提交,不为空则进行提交
      this.diffFormData()
      if (!this.diffData) {
        this.$message.error('未修改任何数据,无需提交')
      } else {
        this.$refs.formRef.validate(async valid => {
          if (!valid) return
          const { data: res } = await this.$http.put('user', this.diffData)
          ........
        })
      }
    }
  }
}
</script>
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值