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判断图片是否加载完成且获取图片宽度的方法
Apr 09 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
Apr 16 Javascript
JS动态插入并立即执行回调函数的方法
Apr 21 Javascript
js基于cookie记录来宾姓名的方法
Jul 19 Javascript
AngularJS中指令的四种基本形式实例分析
Nov 22 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
May 13 jQuery
JS+HTML5 FileReader实现文件上传前本地预览功能
Mar 27 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
Aug 25 Javascript
微信小程序自定义底部导航带跳转功能
Nov 27 Javascript
微信小程序页面间跳转传参方式总结
Jun 13 Javascript
js HTML DOM EventListener功能与用法实例分析
Apr 27 Javascript
vue实现PC端分辨率适配操作
Aug 03 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 文件锁
2017/02/19 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
jQuery实现动画效果的简单实例
2014/01/27 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
python读取注册表中值的方法
2013/04/08 Python
使用python加密自己的密码
2015/08/04 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python回调函数中使用多线程的方法
2017/12/25 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
Python PIL图片添加字体的例子
2019/08/22 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
商务邀请函范文
2014/01/14 职场文书
保险内勤岗位职责
2014/04/05 职场文书
宿舍标语大全
2014/06/19 职场文书
理财计划书
2014/08/14 职场文书
2015年营业员工作总结
2015/04/23 职场文书
聘任书范文大全
2015/09/21 职场文书
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技