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中“+”的陷阱深刻理解
Dec 04 Javascript
只需一行代码,轻松实现一个在线编辑器
Nov 12 Javascript
jquery日历控件实现方法分享
Mar 07 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
May 29 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
Jan 01 Javascript
AngularJS基础 ng-value 指令简单示例
Aug 03 Javascript
localStorage实现便签小程序
Nov 28 Javascript
jQuery之动画ajax事件(实例讲解)
Jul 18 jQuery
vue绑定class与行间样式style详解
Aug 16 Javascript
使用Vuex解决Vue中的身份验证问题
Sep 28 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
Jul 20 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引用返回与取消引用的详解
2013/06/08 PHP
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
python实现的一个p2p文件传输实例
2014/06/04 Python
优化Python代码使其加快作用域内的查找
2015/03/30 Python
Python装饰器知识点补充
2018/05/28 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
最新计算机专业自荐信
2013/10/16 职场文书
怎么样写好简历中的自我评价
2013/10/25 职场文书
年度考核自我鉴定
2013/11/09 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
领导干部作风整顿剖析材料
2014/10/11 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
个人先进事迹材料
2014/12/29 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android