基于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之锁定表格栏位
Jun 29 Javascript
初窥JQuery(二) 事件机制(1)
Nov 25 Javascript
基于Jquery实现表格动态分页实现代码
Jun 21 Javascript
jquery实现无限分级横向导航菜单的方法
Mar 12 Javascript
AngularJS实现动态编译添加到dom中的方法
Nov 04 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
javascript中的深复制详解及实例分析
Dec 29 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
Feb 09 Javascript
JS实现简单的点赞与踩功能示例
Dec 05 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
Feb 12 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
Sep 11 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
Nov 09 jQuery
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 Google的translate API代码
2008/12/10 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
详解php用static方法的原因
2018/09/12 PHP
laravel5.6实现数值转换
2019/10/23 PHP
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
jQuery实现可拖动进度条实例代码
2017/06/21 jQuery
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
Vue keep-alive实践总结(推荐)
2017/08/31 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
python实现排序算法
2014/02/14 Python
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
对Python中的@classmethod用法详解
2018/04/21 Python
python docx 中文字体设置的操作方法
2018/05/08 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
Python @property使用方法解析
2019/09/17 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
2014四风问题对照检查材料范文
2014/09/15 职场文书
会计实训报告范文
2014/11/04 职场文书
新生开学寄语大全
2015/05/28 职场文书