基于element-ui对话框el-dialog初始化的校验问题解决


Posted in Javascript onSeptember 11, 2020

不刷新页面重新打开el-dialog时,如果我们绑定了rules或者某个值需要required,它总会自动校验。

查看了多个博文,发现常用的有两种解决方法(下列方法都可以在其他博文查看,不再细写,如有需要请自行查询):

1.给dialog套上v-if ;

2.在关闭dialog时,监听关闭回调,清除校验。

我在自己的项目里使用了上述两种方法,都不太好用,自己琢磨出了另一种方法:

<el-dialog @open="openDialog()">

</el-dialog>

调用dialog打开的回调

methods:
 
openDialog(){
  this.$nextTick(() => {
    this.$refs.dataForm.clearValidate();
  })
}

初始化dialog时, 拿到变化后的dom, 进行清除校验

补充知识:Cannot read property 'resetFields' of undefined 问题及引申

问题描述: 使用element开发我的后台系统,编辑和新增使用了同一个弹出框<el-dialog><el-form></el-form></el-dialog>

绑定了数据data里的commentForm对象

为了在新增弹出框清空表单, 使用了this.$refs[formName].resetFields()

每次第一次点击新增显示弹出框,都会报错

"[Vue warn]: Error in event handler for "click": "TypeError: Cannot read property 'resetFields' of undefined""

问题原因:

mouted加载table数据以后,隐藏的弹出框并没有编译渲染进dom里面。

所以@click="dialogFormVisible = true;resetForm('dlgForm')"click弹出的时候$refs并没有获取到dom元素导致 'resetFields' of undefined

解决方法:

1、($nextTick dom下一次更新之后)

resetForm(formName) {
        this.$nextTick(()=>{
          this.$refs[formName].resetFields();
        })        
      },

2、(如果是第一次就点击新增就没必要reset, 根据元素undefined判断)

if (this.$refs[formName] !== undefined) {
          this.$refs[formName].resetFields();
        }

注意事项:对DOM一系列的js操作最好都要放进Vue.nextTick()的回调函数中

以上这篇基于element-ui对话框el-dialog初始化的校验问题解决就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 支持链式调用的异步调用框架Async.Operation
Aug 04 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
Feb 26 Javascript
Javascript跨域请求的4种解决方式
Mar 17 Javascript
关于Javascript与iframe的那些事儿
Jul 04 Javascript
JavaScript function 的 length 属性使用介绍
Sep 15 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
Jan 23 Javascript
理解javascript封装
Feb 23 Javascript
Spring MVC中Ajax实现二级联动的简单实例
Jul 06 Javascript
js实现文字截断功能
Sep 14 Javascript
vue实现全选、反选功能
Nov 17 Javascript
Node做中转服务器转发接口
Oct 18 Javascript
Vue项目利用axios请求接口下载excel
Nov 17 Vue.js
vue界面发送表情的实现代码
Sep 11 #Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 #Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
Sep 11 #Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
Sep 11 #Javascript
关于ES6尾调用优化的使用
Sep 11 #Javascript
在js文件中引入(调用)另一个js文件的三种方法
Sep 11 #Javascript
Vue项目开发常见问题和解决方案总结
Sep 11 #Javascript
You might like
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
php中的观察者模式简单实例
2015/01/20 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
Javascript 面向对象之重载
2010/05/04 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
15个非常实用的JavaScript代码片段
2016/12/18 Javascript
图解Javascript——作用域、作用域链、闭包
2017/03/21 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
vue获取dom元素注意事项
2017/12/28 Javascript
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
Javascript实现单选框效果
2020/12/09 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python编程之属性和方法实例详解
2015/05/19 Python
Python sys.argv用法实例
2015/05/28 Python
使用Python从有道词典网页获取单词翻译
2016/07/03 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
Python连接Redis的基本配置方法
2018/09/13 Python
python实现关闭第三方窗口的方法
2019/06/28 Python
python 修改本地网络配置的方法
2019/08/14 Python
畜牧兽医本科生的自我评价
2014/03/03 职场文书
后备干部培训方案
2014/05/22 职场文书
法学自荐信
2014/06/20 职场文书
软件测试专业推荐信
2014/09/18 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
平安建设汇报材料
2014/12/29 职场文书
综合测评自我评价
2015/03/06 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书