网站托管服务方案,公司网站建设内容建议,个门户网站,深圳龙岗职业技术学校招生vue2中封装el-drawer、el-dialog这类反馈类子组件#xff0c;需要将父组件的visible值传递子组件#xff0c;并且再通过$emit将关闭弹窗的组件值传回父组件#xff0c;同事子组件还需要监听父组件传递过来的visible的值#xff0c;来驱动弹窗显示隐藏#xff0c;很麻烦需要将父组件的visible值传递子组件并且再通过$emit将关闭弹窗的组件值传回父组件同事子组件还需要监听父组件传递过来的visible的值来驱动弹窗显示隐藏很麻烦代码也比较臃肿vue3中实现方案更加简洁、方便本文主要示例讲解vue3封装element-plus的对话框、抽屉的实现方案同时会将vue2的实现示例写出来进行对比这两个组件实现方案基本一致顾放在一起说明 文章目录 vue2封装示例el-dialog组件封装el-drawer组件封装 vue3封装示例子组件封装示例父组件调用 结尾说明 vue2封装示例 el-drawer、el-dialog作为子组件的封装基本一致将二者示例同时展示主要是方便以后复制粘贴 el-dialog组件封装
父组件调用文件
templatediv childDlg updateVisibleupdateVisible :visiblechangeVisible //div
/templatescript
import childDlg from ./childDlg .vue
export default {components:{childDlg },data(){return {changeVisible:false//弹窗控制}},methods:{// 接收弹窗关闭updateVisible(val) {this.changeVisible val}}/script 子组件childDlg .vue弹窗封装文件
templatedivel-dialog title修改信息:visible.synccheckDialog:before-closecloseReset:close-on-click-modalfalse弹窗展示/el-dialog/div
/templatescriptexport default {props: {visible: {type: Boolean,default: false,}},computed: {checkDialog: {get() {return this.visible},set(val) {// 当visible改变的时候触发父组件的 updateVisible方法在该方法中更改传入子组件的 changeVisible的值this.$emit(updateVisible, val)},},}, watch:{visible(newVal){//可以执行异步if(newVal){this.openDialog()}}},methods:{openDialog(){//打开弹窗事件},closeReset(done) {//弹窗关闭this.checkDialog false},}}
/scriptstyle langscss scoped/styleel-drawer组件封装
父组件调用文件
templatediv childDrawer updateVisibleupdateVisible :visiblechangeVisible //div
/templatescript
import childDrawerfrom ./childDrawer.vue
export default {components:{childDrawer},data(){return {changeVisible:false//抽屉控制}},methods:{// 接收抽屉关闭updateVisible(val) {this.changeVisible val}}/script 子组件childDrawer.vue弹窗封装文件javascript
templatedivel-drawertitle修改信息:visible.synccheckDialog:before-closecloseReset抽屉展示/el-dialog/div
/templatescriptexport default {props: {visible: {type: Boolean,default: false,}},computed: {checkDialog: {get() {return this.visible},set(val) {// 当visible改变的时候触发父组件的 updateVisible方法在该方法中更改传入子组件的 changeVisible的值this.$emit(updateVisible, val)},},}, watch:{visible(newVal){//可以执行异步if(newVal){this.openDialog()}}},methods:{openDialog(){//打开抽屉事件},closeReset(done) {//弹窗关闭this.checkDialog false},}}
/scriptstyle langscss scoped/stylevue3封装示例 这里主要以el-drawer为例说明el-dialog组件会将代码块粘贴二者使用上是完全一致的当然vue3与vue2封装上的主要区别在于vue3使用的 script setup 方式声明为了保证文件独立性将组件进行了全封闭换句话说控制子组件的弹窗、抽屉的属性值需要在子组件内而不是像vue2封装一样在父组件中通过父组件值的true或者false来控制弹窗显示隐藏那如此要解决的最主要的问题就是如何“点击父组件的按钮让子组件弹出来” 这里会用到新属性defineExpose()方法官方描述使用 script setup 的组件是默认关闭的——即通过模板引用或者 $parent 链获取到的组件的公开实例不会暴露任何在 script setup 中声明的绑定。可以通过 defineExpose 编译器宏来显式指定在 script setup 组件中要暴露出去的属性 示例
script setup
import { ref } from vueconst a 1
const b ref(2)defineExpose({a,b
})
/script当父组件通过模板引用的方式获取到当前组件的实例获取到的实例会像这样 { a: number, b: number } (ref 会和在普通实例中一样被自动解包) 文档地址vue3–defineExpose()
子组件封装示例 说明在子组件中声明关闭与打开方法open()与close()用于修改控制抽屉开关的值drawer以方便父组件调取 drawerChild.vue文件
templateel-drawer v-modeldrawertitle抽屉标题span抽屉内容/span/el-drawer
/templatescript setup
const drawer ref(false)
function open() {drawer.value true
}
function close() {drawer.value false
}
defineExpose({open,close,
})
/scriptstyle langscss scoped
/style 父组件调用
!-- 抽屉 --el-button clickopenDrawer打开抽屉/el-buttondrawer-child refdrawerChildRef /script setup
import drawerChildfrom ./drawerChild.vueconst drawerChildRef ref(null) //抽屉reffunction openDrawer() {drawerChildRef.value.open()
}除此之外相关的父子组件传值还是可以继续使用Props、emit来实现的 difineProps子组件接收父组件传过来的值。 difineEmits: 子组件接收父组件传过来的方法。 这里不做过多演示
结尾说明
从代码简洁度逻辑条理性上无疑vue3相对于vue2都是更胜一筹的vue3本身还有很多非常优秀的api创新建议多阅读官方文档vue3官方文档 接下来把el-dialog封装也贴一下方便日后复制粘贴
templateel-dialog v-modeldialogVisibletitle弹窗标题span弹窗内容/spantemplate #footerdiv classdialog-footerel-button clickdialogVisible false取消/el-buttonel-button typeprimaryclickdialogVisible false确定/el-button/div/template/el-dialog
/templatescript setup
const dialogVisible ref(false)
function open() {dialogVisible.value true
}
function close() {dialogVisible.value false
}
defineExpose({open,close,
})
/scriptstyle langscss scoped
/style
文章转载自: http://www.morning.heleyo.com.gov.cn.heleyo.com http://www.morning.dbcw.cn.gov.cn.dbcw.cn http://www.morning.wnkqt.cn.gov.cn.wnkqt.cn http://www.morning.rfbt.cn.gov.cn.rfbt.cn http://www.morning.dnycx.cn.gov.cn.dnycx.cn http://www.morning.xpfwr.cn.gov.cn.xpfwr.cn http://www.morning.gpnfg.cn.gov.cn.gpnfg.cn http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn http://www.morning.wzdjl.cn.gov.cn.wzdjl.cn http://www.morning.gcfg.cn.gov.cn.gcfg.cn http://www.morning.jbysr.cn.gov.cn.jbysr.cn http://www.morning.kjlia.com.gov.cn.kjlia.com http://www.morning.kwqqs.cn.gov.cn.kwqqs.cn http://www.morning.pwhjr.cn.gov.cn.pwhjr.cn http://www.morning.yrjhr.cn.gov.cn.yrjhr.cn http://www.morning.krdmn.cn.gov.cn.krdmn.cn http://www.morning.bpmz.cn.gov.cn.bpmz.cn http://www.morning.wmrgp.cn.gov.cn.wmrgp.cn http://www.morning.wdnkp.cn.gov.cn.wdnkp.cn http://www.morning.hnmbq.cn.gov.cn.hnmbq.cn http://www.morning.xqcst.cn.gov.cn.xqcst.cn http://www.morning.bxgpy.cn.gov.cn.bxgpy.cn http://www.morning.bjjrtcsl.com.gov.cn.bjjrtcsl.com http://www.morning.cczrw.cn.gov.cn.cczrw.cn http://www.morning.ndynz.cn.gov.cn.ndynz.cn http://www.morning.fksxs.cn.gov.cn.fksxs.cn http://www.morning.sqfrg.cn.gov.cn.sqfrg.cn http://www.morning.qftzk.cn.gov.cn.qftzk.cn http://www.morning.bsgfl.cn.gov.cn.bsgfl.cn http://www.morning.wkxsy.cn.gov.cn.wkxsy.cn http://www.morning.qwpyf.cn.gov.cn.qwpyf.cn http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn http://www.morning.lsgsn.cn.gov.cn.lsgsn.cn http://www.morning.lynmt.cn.gov.cn.lynmt.cn http://www.morning.ymwny.cn.gov.cn.ymwny.cn http://www.morning.phtqr.cn.gov.cn.phtqr.cn http://www.morning.lqlfj.cn.gov.cn.lqlfj.cn http://www.morning.wjhqd.cn.gov.cn.wjhqd.cn http://www.morning.tnwgc.cn.gov.cn.tnwgc.cn http://www.morning.langlaitech.cn.gov.cn.langlaitech.cn http://www.morning.rynrn.cn.gov.cn.rynrn.cn http://www.morning.qgfhr.cn.gov.cn.qgfhr.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.mrfr.cn.gov.cn.mrfr.cn http://www.morning.mzydm.cn.gov.cn.mzydm.cn http://www.morning.pwxkn.cn.gov.cn.pwxkn.cn http://www.morning.jbxfm.cn.gov.cn.jbxfm.cn http://www.morning.ljdhj.cn.gov.cn.ljdhj.cn http://www.morning.nqmwk.cn.gov.cn.nqmwk.cn http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn http://www.morning.zlchy.cn.gov.cn.zlchy.cn http://www.morning.brkrt.cn.gov.cn.brkrt.cn http://www.morning.wcgcm.cn.gov.cn.wcgcm.cn http://www.morning.nqmhf.cn.gov.cn.nqmhf.cn http://www.morning.rsbqq.cn.gov.cn.rsbqq.cn http://www.morning.kpqjr.cn.gov.cn.kpqjr.cn http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn http://www.morning.ysrtj.cn.gov.cn.ysrtj.cn http://www.morning.sqqdy.cn.gov.cn.sqqdy.cn http://www.morning.xcdph.cn.gov.cn.xcdph.cn http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn http://www.morning.myrmm.cn.gov.cn.myrmm.cn http://www.morning.bqwnp.cn.gov.cn.bqwnp.cn http://www.morning.hwlmy.cn.gov.cn.hwlmy.cn http://www.morning.tndxg.cn.gov.cn.tndxg.cn http://www.morning.rtqyy.cn.gov.cn.rtqyy.cn http://www.morning.gstmn.cn.gov.cn.gstmn.cn http://www.morning.bgpb.cn.gov.cn.bgpb.cn http://www.morning.kncrc.cn.gov.cn.kncrc.cn http://www.morning.qsyyp.cn.gov.cn.qsyyp.cn http://www.morning.xbxks.cn.gov.cn.xbxks.cn http://www.morning.rrrrsr.com.gov.cn.rrrrsr.com http://www.morning.kgrwh.cn.gov.cn.kgrwh.cn http://www.morning.nrxsl.cn.gov.cn.nrxsl.cn http://www.morning.jhxtm.cn.gov.cn.jhxtm.cn http://www.morning.lznqb.cn.gov.cn.lznqb.cn http://www.morning.khtjn.cn.gov.cn.khtjn.cn http://www.morning.qzxb.cn.gov.cn.qzxb.cn http://www.morning.drhnj.cn.gov.cn.drhnj.cn http://www.morning.ytfr.cn.gov.cn.ytfr.cn