基于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 相关文章推荐
DOM和XMLHttpRequest对象的属性和方法整理
Jan 04 Javascript
js仿百度贴吧验证码特效实例代码
Jan 16 Javascript
javascript基于HTML5 canvas制作画箭头组件
Jun 25 Javascript
JQuery中serialize()用法实例分析
Feb 06 Javascript
js设置document.domain实现跨域的注意点分析
May 21 Javascript
Jquery实现顶部弹出框特效
Aug 08 Javascript
Vue编写多地区选择组件
Aug 21 Javascript
浅谈node中的cluster集群
Jun 02 Javascript
clipboard在vue中的使用的方法示例
Oct 19 Javascript
vue-cli3全面配置详解
Nov 14 Javascript
用Node写一条配置环境的指令
Nov 14 Javascript
vue如何实现动态加载脚本
Feb 05 Javascript
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.NET的入门教程
2006/10/09 PHP
PHP入门教程之会话控制技巧(cookie与session)
2016/09/11 PHP
php mysql 封装类实例代码
2016/09/18 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP 断点续传实例详解
2017/11/11 PHP
Javascript操作URL函数修改版
2013/11/07 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
python用来获得图片exif信息的库实例分析
2015/03/16 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Linux下python制作名片示例
2018/07/20 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
详解python tcp编程
2020/08/24 Python
python 两种方法删除空文件夹
2020/09/29 Python
大学生职业规划前言模板
2013/12/27 职场文书
新学期校长寄语
2014/01/18 职场文书
会计专业自我鉴定
2014/02/10 职场文书
运动会入场口号
2014/06/07 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
检讨书怎么写
2015/01/23 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
MySQL创建定时任务
2022/01/22 MySQL
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers