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给input和textarea设定ie中的focus
May 29 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
Aug 18 Javascript
22点关于jquery性能优化的建议
May 28 Javascript
删除条目时弹出的确认对话框
Jun 05 Javascript
javascript中html字符串转化为jquery dom对象的方法
Aug 27 Javascript
easyui-datagrid特殊字符不能显示的处理方法
Apr 12 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
May 10 Javascript
AngularJS 验证码60秒倒计时功能的实现
Jun 05 Javascript
微信小程序block的使用教程
Apr 01 Javascript
如何安装控制器JavaScript生成插件详解
Oct 21 Javascript
js实现全选和全不选
Jul 28 Javascript
vue.js+element 默认提示中英文操作
Nov 11 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
CI(CodeIgniter)框架介绍
2014/06/09 PHP
CodeIgniter与PHP5.6的兼容问题
2015/07/16 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
JavaScript改变HTML元素的样式改变CSS及元素属性
2013/11/12 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
JS实现往下不断流动网页背景的方法
2015/02/27 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
基于python实现聊天室程序
2018/07/27 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
美国大型的健身社区和补充商店:Bodybuilding.com
2016/09/06 全球购物
设计师个人求职信范文
2014/02/02 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
挂靠协议书
2015/01/27 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书