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 相关文章推荐
背景音乐每次刷新都可以自动更换
Feb 01 Javascript
Jquery插件之多图片异步上传
Oct 20 Javascript
JS网页播放声音实现代码兼容各种浏览器
Sep 22 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
Jun 12 Javascript
AngularJS ng-change 指令的详解及简单实例
Jul 30 Javascript
Javascript中关于Array.filter()的妙用详解
Dec 04 Javascript
vue.js学习之递归组件
Dec 13 Javascript
javascript正则表达式模糊匹配IP地址功能示例
Jan 06 Javascript
基于Vuejs和Element的注册插件的编写方法
Jul 03 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
Oct 18 Javascript
JS实现动态生成html table表格的方法分析
Jul 11 Javascript
async/await优雅的错误处理方法总结
Jan 30 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连接MongoDB示例代码
2012/09/06 PHP
Zend Framework入门教程之Zend_Mail用法示例
2016/12/08 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
jQuery 使用个人心得
2009/02/26 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
Angular实现双向折叠列表组件的示例代码
2017/11/21 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
跟老齐学Python之再深点,更懂list
2014/09/20 Python
Python 操作文件的基本方法总结
2017/08/10 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
解决DataFrame排序sort的问题
2018/06/07 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
基于Python组装jmx并调用JMeter实现压力测试
2020/11/03 Python
Python如何telnet到网络设备
2021/02/18 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
药剂专业学生求职信范文
2013/12/28 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
卫生系统先进事迹
2014/05/13 职场文书
实习班主任自我评价
2015/03/11 职场文书
MySQL 时间类型的选择
2021/06/05 MySQL
java版 简单三子棋游戏
2022/05/04 Java/Android