基于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 相关文章推荐
jQuery+jqmodal弹出窗口实现代码分明
Jun 14 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
Sep 05 Javascript
js闭包的用途详解
Nov 09 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
AngularJs  Using $location详解及示例代码
Sep 02 Javascript
JS两种类型的表单提交方法实例分析
Nov 28 Javascript
jQuery 选择符详细介绍及整理
Dec 02 Javascript
Javascript实现数组中的元素上下移动
Apr 28 Javascript
vue给组件传递不同的值方法
Sep 29 Javascript
vue 移动端适配方案详解
Nov 15 Javascript
js实现自定义右键菜单
May 18 Javascript
在vue中通过render函数给子组件设置ref操作
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
ftp类(example.php)
2006/10/09 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
jQuery+PHP实现可编辑表格字段内容并实时保存
2015/10/09 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
python调用自定义函数的实例操作
2019/06/26 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
CSS3 文字动画效果
2020/11/12 HTML / CSS
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
学校大课间活动方案
2014/01/30 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
服务承诺书格式
2014/05/21 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
python非标准时间的转换
2021/07/25 Python