element-ui dialog form 弹框表单组件封装

在使用 element-ui 进行后端管理系统开发时,在封装弹框表单时,遇到两个问题,这里进行简单记录:

1、问题一:点击关闭按钮及遮罩层关闭弹框时,页面报错,如下:

子组件封装:

<template><el-dialog title="dialog form" :visible.sync="visible" width="432px"><el-form ref="formRef" :model="form"><el-form-item label="姓名" prop="username"><el-input placeholder="请输入姓名" v-model="form.username"> </el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="handleCancel">取消</el-button><el-button type="primary" @click="handleSubmit">提交</el-button></div></el-dialog>
</template><script>
export default {name: 'DialogForm',props: {visible: {type: Boolean,default: false}},data() {return {form: {username: ''}};},methods: {// 关闭弹框handleCancel() {this.$emit('update:visible', false);},// 提交handleSubmit() {this.$refs.formRef.validate((valid) => {if (valid) {console.log('this.form::', this.form);this.handleCancel();} else {console.log('error submit!!');return false;}});}}
};
</script>

父组件使用:

<template><div><el-button type="primary" @click="handleOpen">dialog form</el-button><!-- 弹框表单--><dialog-form :visible.sync="visible"></dialog-form></div>
</template><script>
import DialogForm from './DialogForm.vue';export default {name: 'Header',components: { DialogForm },data() {return {visible: false};},methods: {handleOpen() {this.visible = true;}}
};
</script>

解决之后,父组件代码不变,子组件代码修改如下:

<template><el-dialog title="dialog form" :visible.sync="dialogVisible" width="432px"><el-form ref="formRef" :model="form"><el-form-item label="姓名" prop="username"><el-input placeholder="请输入姓名" v-model="form.username"> </el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="handleCancel">取消</el-button><el-button type="primary" @click="handleSubmit">提交</el-button></div></el-dialog>
</template><script>
export default {name: 'DialogForm',props: {visible: {type: Boolean,default: false}},data() {return {dialogVisible: this.visible,form: {username: ''}};},watch: {visible(newVal) {this.dialogVisible = newVal;}},methods: {// 关闭弹框handleCancel() {this.dialogVisible = false;this.$emit('update:visible', this.dialogVisible);},// 提交handleSubmit() {this.$refs.formRef.validate((valid) => {if (valid) {console.log('this.form::', this.form);this.handleCancel();} else {console.log('error submit!!');return false;}});}}
};
</script>

产生原因,子组件通过 update 的方式直接修改了 props 传递的属性,解决方法,在子组件中使用一个变量 dialogVisible 接收父组件传递过来的  props 属性 visible,子组件内部 dialog 通过 dialogVisible 这个变量来控制。

2、问题二:点击关闭按钮和遮罩层关闭弹框之后,再次进行打开弹框时,弹框未打开,页面未报错,如下:

父组件代码保持不变,子组件代码修改如下:

<template><el-dialogtitle="dialog form":visible.sync="dialogVisible"width="432px"@close="handleClose"><el-form ref="formRef" :model="form"><el-form-item label="姓名" prop="username"><el-input placeholder="请输入姓名" v-model="form.username"> </el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="handleCancel">取消</el-button><el-button type="primary" @click="handleSubmit">提交</el-button></div></el-dialog>
</template><script>
export default {name: 'DialogForm',props: {visible: {type: Boolean,default: false}},data() {return {dialogVisible: this.visible,form: {username: ''}};},watch: {visible(newVal) {this.dialogVisible = newVal;}},methods: {// 弹框关闭的回调handleClose() {this.handleCancel();},// 关闭弹框handleCancel() {this.dialogVisible = false;this.$emit('update:visible', this.dialogVisible);},// 提交handleSubmit() {this.$refs.formRef.validate((valid) => {if (valid) {console.log('this.form::', this.form);this.handleCancel();} else {console.log('error submit!!');return false;}});}}
};
</script>

产生原因,在点击关闭图标和遮罩层关闭时,子组件未更新父组件的 visible 状态,解决方法,在子组件内通过 close 方法,即 dialog 关闭回调函数来更新父组件状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/707268.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上海初中生古诗文大会倒计时4个月:单选题真题示例和独家解析

现在距离2024年初中生古诗文大会还有4个多月时间&#xff0c;备考要趁早&#xff0c;因为知识点还是相对比较多的。这些知识点对于初中语文的学习也是很有帮助的。 今天我们继续来看10道选择题真题和详细解析&#xff0c;以下题目截取自我独家制作的在线真题集&#xff0c;都是…

普通人也能创业!轻资产短视频带货项目,引领普通人实现创业梦想

在这个信息爆炸的时代&#xff0c;创业似乎成为了越来越多人的梦想。然而&#xff0c;传统的创业模式 keJ0277 往往伴随着高昂的资金投入和复杂的管理流程&#xff0c;让许多普通人望而却步。然而&#xff0c;现在有一种轻资产短视频带货项目正在悄然兴起&#xff0c;它以其低…

【CSND博客纪念】“创作纪念日:从灵感迸发到小有成就——我的CSND博客创作之旅”

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

Verilog 实现 i2c 协议

在时钟&#xff08;SCL&#xff09;为高电平的时候&#xff0c;数据总线&#xff08;SDA&#xff09;必须保持稳定&#xff0c;所以数据总线&#xff08;SDA&#xff09;在时钟&#xff08;SCL&#xff09;为低电平的时候才能改变。 在时钟&#xff08;SCL&#xff09;为高电平…

【c语言】TIMI哥听课笔记

计算机的组成 主储存器&#xff1a;内存条&#xff0c;硬盘 CPU内部&#xff1a;运算器&#xff0c;控制器&#xff0c;寄存器 进制转化&#xff1a;二转八拆三&#xff0c;二转十六拆四 基本数据类型 常量&#xff1a;整型常量&#xff08;十进制&#xff0c;0x十六&#x…

【Altium】AD-检查原理图中元器件未连接的Passive Pin

1、 文档目标 如何让原理图编译时找出元器件上未连接的Passive Pin 2、 问题场景 当引脚属性&#xff08;Pin type&#xff09;为passive时&#xff0c;原理图编译的默认规则是不会去检查它们是否有连接的。在实际设计过程中&#xff0c;经常会有导线虚连&#xff0c;漏连的事…

24长三角B题1-5问完整代码+15页保姆级思路已更新

比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff0c;因为随着后续我们更新资料数…

添加屏幕照片太大了怎么缩小?改变图片大小这几个方法够了

现在我们经常使用手机、平板电脑和相机拍摄照片&#xff0c;然而&#xff0c;有时候我们可能会遇到一个常见的问题就是照片的尺寸太大&#xff0c;难以在特定场合或平台上使用&#xff0c;其实不用担心&#xff0c;本教程将向大家介绍几个如何简单地调整图片大小的方法&#xf…

06_机器学习算法_朴素贝叶斯

1. 朴素贝叶斯的介绍与应用 1.1 朴素贝叶斯的介绍 朴素贝叶斯算法(Naive Bayes, NB)是应用最为广泛的分类算法之一。它是基于贝叶斯定义和特征条件独立假设的分类方法。由于朴素贝叶斯法基于贝叶斯公式计算得到,有着坚实的数学基础,以及稳定的分类效率。NB模型所需估计的…

【Linux】线程周边001之多线程

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.线程的理解 2.地址…

狙击策略专用术语以及含义,WeTrade3秒讲解

想必各位交易高手对狙击策略不会陌生吧!但你想必不知道狙击策略的开发者为了推广狙击策略&#xff0c;在狙击策略基础的经典技术分析理论引入了自己的术语。今天WeTrade众汇和各位投资者继续了解狙击策略专用术语以及含义。 一.BL 银行级别(BL)是前一日线收盘的级别。时间是格…

外贸业务中的12个“坑”,你踩到了吗?

在竞争激烈的外贸领域&#xff0c;企业在拓展市场的同时&#xff0c;也面临着各种潜在的陷阱和风险。对于外贸公司而言&#xff0c;如何在复杂的交易过程中识破陷阱&#xff0c;防范潜在风险&#xff0c;成为确保企业长远发展的关键一环。 以下是一些外贸企业可能遇到的陷阱&a…