基于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 相关文章推荐
HTML中的setCapture和releaseCapture使用介绍
Mar 21 Javascript
IE6浏览器下resize事件被执行了多次解决方法
Dec 11 Javascript
用innerhtml提高页面打开速度的方法
Aug 02 Javascript
jquery插件orbit.js实现图片折叠轮换特效
Apr 14 Javascript
xtemplate node.js 的使用方法实例解析
Aug 22 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
Aug 23 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
Aug 30 Javascript
AngularJS指令中的绑定策略实例分析
Dec 14 Javascript
JS html时钟制作代码分享
Mar 03 Javascript
layui清除radio的选中状态实例
Nov 14 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
Aug 11 Javascript
vue代码分块和懒加载非必要资源文件
Apr 11 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
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
2019/03/25 PHP
Laravel 框架返回状态拦截代码
2019/10/18 PHP
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
jQuery拖动图片删除示例
2013/05/10 Javascript
深入理解Javascript作用域与变量提升
2013/12/09 Javascript
js实现圆盘记速表
2015/08/03 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
使用 jQuery 实现表单验证功能
2017/07/05 jQuery
使用canvas进行图像编辑的实例
2017/08/29 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
python提示No module named images的解决方法
2014/09/29 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
Python2与Python3的区别点整理
2019/12/12 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
买房委托公证书
2014/04/08 职场文书
2014年药房工作总结
2014/11/22 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
vue项目支付功能代码详解
2022/02/18 Vue.js