需求

  • 在提交表单使用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>

差不多这样子就实现啦

成长路上对自己所学的一些总结,各路大侠若有更好的办法望留言相助哇!

如果这篇文章对你有帮助的话请点帮我点个赞,让我知道我写的文章有帮助到他人哈哈哈,谢谢!

Logo

前往低代码交流专区

更多推荐