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 相关文章推荐
JQuery Tips(2) 关于$()包装集你不知道的
Dec 14 Javascript
基于jQuery判断两个元素是否有重叠部分的代码
Jul 25 Javascript
jquery+css+ul模拟列表菜单具体实现思路
Apr 15 Javascript
jQuery模拟点击A标记示例参考
Apr 17 Javascript
jquery和css3实现的炫酷时尚的菜单导航
Sep 01 Javascript
原生js实现模拟滚动条
Jun 15 Javascript
简单的分页代码js实现
May 17 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
Feb 17 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
Aug 23 Javascript
在vue中使用v-bind:class的选项卡方法
Sep 27 Javascript
vue-cli设置publicPath小记
Apr 14 Javascript
详解JavaScript自定义函数
Jul 29 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
乐信RP2100的电路分析和打磨
2021/03/02 无线电
图书管理程序(三)
2006/10/09 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
NodeJS的模块写法入门(实例代码)
2012/03/07 NodeJs
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
利用vue-i18n实现多语言切换效果的方法
2019/06/19 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
python2.x实现人民币转大写人民币
2018/06/20 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
CK美国官网:Calvin Klein
2016/08/26 全球购物
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
委托书模板
2014/04/04 职场文书
ktv好的活动方案
2014/08/15 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
班主任开场白
2015/06/01 职场文书
家电创业计划书
2019/08/05 职场文书