Vue2中實(shí)現(xiàn)dialog的封裝方式
最近在看公司以前的項(xiàng)目時(shí)發(fā)現(xiàn),很多表單內(nèi)容較多的dialog是寫(xiě)在列表組件內(nèi)的。
一個(gè)列表頁(yè)的查詢功能,其已經(jīng)包含了搜索的表單,再加上列表中的其他功能,例如:詳情、刪除、導(dǎo)出、導(dǎo)入、提交等操作都寫(xiě)在這一個(gè)組件了,維護(hù)起來(lái)十分繁瑣。
所以,當(dāng)面對(duì)這種彈窗式的內(nèi)容添加的需求時(shí),要么是跳轉(zhuǎn)路由到新的界面,要么是單獨(dú)封裝一個(gè)dialog組件。
這里借助這個(gè)機(jī)會(huì)展示一下dialog組件的封裝。
組件內(nèi)部只有一個(gè)dialog
dialog的控制可見(jiàn)變量最好寫(xiě)在該組件內(nèi),不要寫(xiě)在父組件通過(guò)傳props的方式來(lái)實(shí)現(xiàn),不然還要在父組件再維護(hù)一個(gè)變量,也是不夠特別優(yōu)雅。
<template> <el-dialog title="新增" :visible="visibleDia" @close="closeDia" fullscreen > <!-- 彈窗內(nèi)容自定義 --> <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>
父組件調(diào)用
父組件調(diào)用彈窗組件時(shí)綁定一個(gè)ref
屬性,可通過(guò)$refs
調(diào)用此節(jié)點(diǎn)里的openDia
方法,即可打開(kāi)彈窗;
關(guān)閉彈窗為彈窗組件內(nèi)的邏輯,等事件處理完進(jìn)行自關(guān)閉即可。
<template> <div> <!-- 頁(yè)面其他內(nèi)容 --> <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() { // 此方法被調(diào)用時(shí),說(shuō)明彈窗的新增內(nèi)容已完成 } } } </script>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Vue3中element-plus的el-dialog對(duì)話框無(wú)法顯示的問(wèn)題及解決方法
最近今天在寫(xiě)一個(gè)停車(chē)場(chǎng)管理系統(tǒng)的項(xiàng)目時(shí),在用vue3寫(xiě)前端時(shí),在前端模板選擇上,我一時(shí)腦抽,突然決定放棄SpringBoot,選擇了以前幾乎很少用的element-plus,然后果不其然,錯(cuò)誤連連,下面給大家分享dialog對(duì)話框無(wú)法顯示的原因,感興趣的朋友一起看看吧2023-10-10Vue.2.0.5實(shí)現(xiàn)Class 與 Style 綁定的實(shí)例
本篇文章主要介紹了Vue.2.0.5實(shí)現(xiàn)Class 與 Style 綁定的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06關(guān)于@click.native中?.native?的含義與使用方式
這篇文章主要介紹了關(guān)于@click.native中?.native?的含義與使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Vue路由守衛(wèi)及頁(yè)面登錄權(quán)限控制的設(shè)置方法(兩種)
這篇文章主要介紹了Vue路由守衛(wèi)及頁(yè)面登錄權(quán)限控制的設(shè)置方法,本文通過(guò)實(shí)例代碼通過(guò)兩種方法給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03解決iview打包時(shí)UglifyJs報(bào)錯(cuò)的問(wèn)題
下面小編就為大家分享一篇解決iview打包時(shí)UglifyJs報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03vue3與webpack5安裝element-plus樣式webpack編譯報(bào)錯(cuò)問(wèn)題解決
這篇文章主要介紹了vue3與webpack5安裝element-plus樣式webpack編譯報(bào)錯(cuò),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04