vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作


Posted in Javascript onAugust 03, 2020

在项目中做联系人的添加和编辑功能,点击父级页面的添加和编辑按钮,用的是同一个表单弹窗,数据添加和编辑用同一个弹窗,没有在弹窗使用v-if,性能不是很好,弹窗中有表单,在编辑弹窗表单数据之后关闭弹窗,然后点击添加的时候,弹窗里的表单数据还是之前编辑的数据,无法做到清空表单数据,接下来是解决方法了,嘿嘿

首先是不管是添加还是编辑,都需要将子组件需要的对象属性一一写出来,传给子组件,

然后是主要用到了el-form表单有一个清空重置表单数据的事件方法resetField(),在子组件表单弹窗打开的时候清空一下,在关闭子组件表单弹窗的时候还需要调用resetField()去重置表单数据。这样编辑数据之后再次打开添加数据,页面不会有之前的数据存在,也不会出现验证信息在页面上。

vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作

1. 在父级页面调用子级弹框表单组件(AddEdit.vue)

<!-- form是子组件的form表单数据,meg是子组件弹窗的标题(添加或者编辑) -->
 <!-- <add-edit :msg.sync="msg" v-if='msg' :form='form'></add-edit> -->
 <!-- 没有使用v-if 是因为频繁点击编辑和新增的话,性能方面不是很好-->
<template>
 <el-button @click='addClick'>添加</el-button>
 <el-button @click='editClick(scope.row)'>编辑</el-button>
 <!-- 子组件弹窗 -->
 <add-edit :msg.sync="msg" :form='formData'></add-edit>
</template>
<script>
export default {
 data() {
 return {
  formData: {}
 }
 },
 
 methods: {
 addClick() {
 //需要将子组件需要的对象属性传过去,这一步必须得有,这样在子组件才可以清空表单
  this.formData = {
  name: '',
  email: '',
  phone: ''
  }
  this.msg = '添加'
 },
 
 editClick(row) {
  this.formData = row;
  this.msg = '编辑'
 }
 }
}
</script>

2. 点击父级页面的编辑按钮,将人员信息传递给AddEdit.vue

<template>
 <el-dialog :visible.sync="isShow" width="500px" class="edit-contact" :before-close="closeDialog">
  <span slot="title">{{msg}}联系人</span>
  <el-form :model="form" ref="ruleForm" label-width="100px" :rules="rules" size="small">
   <el-form-item :label="it.label" :prop="it.prop" v-for="it in formLabel" :key="it.prop">
    <el-input v-model="form[it.prop]" :placeholder="`请输入${it.label}`"></el-input>
   </el-form-item>
  </el-form>
  <div class="base-btn-action">
   <el-button size="small" type="primary" @click="saveContact">{{form.id?'编辑':'添加'}}</el-button>
   <el-button size="small" @click="closeDialog">取 消</el-button>
  </div>
 </el-dialog>
</template>
<script>
export default {
 props: {
  msg: {
   //“添加”或者“编辑”
   type: String,
   default: ""
  },
  form: {
  //接收父组件传过来得对象数据
   type: Object,
   default: () => {}
  }
 },
 data() {
  return {
   formLabel: [
    { label: "姓名", prop: "name" },
    { label: "邮箱", prop: "email" },
    { label: "联系方式", prop: "phone" }
   ],
   rules: {
    name: [{ required: true, message: "请输入姓名", trigger: "change" }],
    email: [
     { required: true, message: "请输入邮箱", trigger: "change" },
     { type: "email", message: "请输入正确的邮箱地址", trigger: ["blur"] }
    ],
    phone: [
     { required: true, message: "请输入手机号", trigger: "change" }
    ]
   }
  };
 },
 computed: {
 //通过props的数据msg的值是否为空来判断弹框显示与否
  isShow() {
   return this.msg === "" ? false : true;
  }
 },
 watch: {
 //监听子组件弹窗是否打开
  msg(n) {
  //子组件打开得情况
    if (n !== '') {
     if (!this.$refs.ruleForm) {
     //初次打开子组件弹窗的时候,form表单dom元素还没加载成功,需要异步获取
      this.$nextTick(() => {
       this.$refs.ruleForm.resetFields() // 去除验证
      })
     } else {
     //再次打开子组件弹窗,子组件弹窗的form表单dom元素已经加载好了,不需要异步获取
      this.$refs.ruleForm.resetFields() // 去除验证
     }
    }
   },
 },
 methods: {
  closeDialog() {
   this.$emit("update:msg", "");
   setTimeout(() => {
   //关闭弹窗的时候表单也重置为初始值并移除校验结果
    this.$refs.ruleForm.resetFields();
   }, 200);
  }
 }
};
</script>

好了,问题解决了,在此记录一下,以后可以翻回来再看看!

以上这篇vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
浅谈JavaScript中面向对象技术的模拟
Sep 25 Javascript
静态页面的值传递(三部曲)
Sep 25 Javascript
关于javascript document.createDocumentFragment()
Apr 04 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
Feb 18 Javascript
利用jQuery实现可以编辑的表格
May 26 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
Nov 10 Javascript
微信小程序封装http访问网络库实例代码
May 24 Javascript
微信小程序使用swiper组件实现类3D轮播图
Aug 29 Javascript
Vue中常用rules校验规则(实例代码)
Nov 14 Javascript
vue路由缓存的几种实现方式小结
Feb 02 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
Aug 07 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
Aug 03 #Javascript
VUE使用axios调用后台API接口的方法
Aug 03 #Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
Aug 03 #Javascript
js数组中去除重复值的几种方法
Aug 03 #Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
Aug 03 #Javascript
javascript运行机制之执行顺序理解
Aug 03 #Javascript
解决vue+elementui项目打包后样式变化问题
Aug 03 #Javascript
You might like
PHP SEO优化之URL优化方法
2011/04/21 PHP
PHP Include文件实例讲解
2019/02/15 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
javascript时间函数大全
2014/06/30 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
jQuery判断对象是否存在的方法
2015/02/05 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
React和Vue中监听变量变化的方法
2018/11/14 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
Python中的异常处理简明介绍
2015/04/13 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
python爬取微信公众号文章的方法
2019/02/26 Python
opencv与numpy的图像基本操作
2019/03/08 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
python如何使用代码运行助手
2020/07/03 Python
CSS3中利用animation属性创建雪花飘落特效
2014/05/14 HTML / CSS
CSS3实现点击放大的动画实例代码
2017/02/27 HTML / CSS
联想台湾官网:Lenovo TW
2018/05/09 全球购物
上班看电影检讨书
2014/02/12 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
2014年保育员工作总结
2014/12/02 职场文书
出纳岗位职责
2015/01/31 职场文书
辩护词范文大全
2015/05/21 职场文书
开学典礼致辞
2015/07/29 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
Django利用AJAX技术实现博文实时搜索
2021/05/06 Python