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 相关文章推荐
利用JS判断用户是否上网(连接网络)
Dec 23 Javascript
JavaScript实现多个重叠层点击切换效果的方法
Apr 24 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
Sep 24 Javascript
js实现表单多按钮提交action的处理方法
Oct 24 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
Apr 06 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
Jun 10 Javascript
javascript跨域请求包装函数与用法示例
Nov 03 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 jQuery
Electron vue的使用教程图文详解
Jul 05 Javascript
vue实现户籍管理系统
May 29 Javascript
查找Vue中下标的操作(some和findindex)
Aug 12 Javascript
jquery插件实现图片悬浮
Apr 16 jQuery
浅谈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
通过html表格发电子邮件
2006/10/09 PHP
php使用ICQ网关发送手机短信
2013/10/30 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
PHP的关于变量和日期处理的一些面试题目整理
2015/08/10 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
在IE和VB中支持png图片透明效果的实现方法(vb源码打包)
2011/04/01 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
详解Vue数据驱动原理
2020/11/17 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
Python识别验证码的实现示例
2020/09/30 Python
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
简历中自我评价范文3则
2013/12/14 职场文书
2014年司法所工作总结
2014/11/22 职场文书
企业工会工作总结2015
2015/05/13 职场文书
2016年教师节感言
2015/12/09 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL