Vue2中实现dialog的封装方式
最近在看公司以前的项目时发现,很多表单内容较多的dialog是写在列表组件内的。
一个列表页的查询功能,其已经包含了搜索的表单,再加上列表中的其他功能,例如:详情、删除、导出、导入、提交等操作都写在这一个组件了,维护起来十分繁琐。
所以,当面对这种弹窗式的内容添加的需求时,要么是跳转路由到新的界面,要么是单独封装一个dialog组件。
这里借助这个机会展示一下dialog组件的封装。
组件内部只有一个dialog
dialog的控制可见变量最好写在该组件内,不要写在父组件通过传props的方式来实现,不然还要在父组件再维护一个变量,也是不够特别优雅。
<template>
<el-dialog
title="新增"
:visible="visibleDia"
@close="closeDia"
fullscreen
>
<!-- 弹窗内容自定义 -->
<div slot="footer">
<el-button @click="saveInfo" type="primary">保存</el-button>
<el-button @click="closeDia" type="primary" plain>取消</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
name: 'SaveDialog',
data() {
return {
visibleDia: false,
}
},
methods: {
openDia() {
this.visibleDia = true
},
closeDia() {
this.visibleDia = false
},
saveInfo() {
// 告诉父组件,保存成功
this.$emit('saveSuccess', true)
this.closeDia()
}
}
}
</script>
父组件调用
父组件调用弹窗组件时绑定一个ref属性,可通过$refs调用此节点里的openDia方法,即可打开弹窗;
关闭弹窗为弹窗组件内的逻辑,等事件处理完进行自关闭即可。
<template>
<div>
<!-- 页面其他内容 -->
<el-button @click="handleAdd">新增</el-button>
<save-dialog
ref="saveDialog"
@saveSuccess="saveSuccess"
/>
</div>
</template>
<script>
import SaveDialog from './SaveDialog.vue'
export default {
name: 'Index',
components: { SaveDialog },
methods: {
handleAdd() {
this.$refs.saveDialog.openDia()
},
saveSuccess() {
// 此方法被调用时,说明弹窗的新增内容已完成
}
}
}
</script>总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
关于Vue3中element-plus的el-dialog对话框无法显示的问题及解决方法
最近今天在写一个停车场管理系统的项目时,在用vue3写前端时,在前端模板选择上,我一时脑抽,突然决定放弃SpringBoot,选择了以前几乎很少用的element-plus,然后果不其然,错误连连,下面给大家分享dialog对话框无法显示的原因,感兴趣的朋友一起看看吧2023-10-10
Vue.2.0.5实现Class 与 Style 绑定的实例
本篇文章主要介绍了Vue.2.0.5实现Class 与 Style 绑定的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-06
关于@click.native中 .native 的含义与使用方式
这篇文章主要介绍了关于@click.native中 .native 的含义与使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-10-10
vue3与webpack5安装element-plus样式webpack编译报错问题解决
这篇文章主要介绍了vue3与webpack5安装element-plus样式webpack编译报错,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-04-04


最新评论