vue3 銷毀組件方法及問(wèn)題解決方案
問(wèn)題描述:使用elementplus的dialog,當(dāng)關(guān)閉彈窗后不刷新頁(yè)面,直接再次打開(kāi)發(fā)現(xiàn)彈窗中還存留上一次的數(shù)據(jù)。嘗試定義關(guān)閉事件,或者使用api中提供的屬性destroy-on-close 都不行。后來(lái)發(fā)現(xiàn)這是一個(gè)誤區(qū)。彈窗關(guān)閉時(shí)并不代表這個(gè)組件已經(jīng)被銷毀了,只是dialog關(guān)閉了
解決方法:使用v-if 控制頁(yè)面的創(chuàng)建與銷毀。
由于我這里dailog中的數(shù)據(jù)比較多,所以我抽成了一個(gè)組件,在父組件中引用了,但是關(guān)閉彈窗的操作是在子組件的dialog中,所以這里又涉及到了子父組件的傳值。再來(lái)復(fù)習(xí)一遍~。
ps:我這里的業(yè)務(wù)場(chǎng)景是通過(guò)在父頁(yè)面點(diǎn)擊按鈕來(lái)控制子頁(yè)面是否彈出來(lái),所以具體實(shí)現(xiàn)是這樣的:
在父頁(yè)面中定義一個(gè)變量,默認(rèn)為false,當(dāng)點(diǎn)擊彈出按鈕時(shí),將這個(gè)變量置為true;子頁(yè)面中手動(dòng)觸發(fā)關(guān)閉dialog的事件中,將該變量設(shè)置為false,并將值傳遞待到這個(gè)父頁(yè)面。
結(jié)構(gòu):
子組件

父組件:

接下來(lái)具體實(shí)現(xiàn):
子組件:當(dāng)子組件的dialog手動(dòng)關(guān)閉時(shí)

關(guān)閉方法:
使用defineEmits,定義一個(gè)方法,并用一個(gè)變量去接收,在關(guān)閉事件中傳遞一個(gè)值,為false
const colse = defineEmits(["ok"])
function closeNDialog() {
colse("ok", false)
}父頁(yè)面:在父頁(yè)面引用的子組件中使用v-if綁定是否銷毀標(biāo)識(shí),并定義方法去接收子組件傳遞過(guò)來(lái)的布爾值。在父頁(yè)面通過(guò)點(diǎn)擊button打開(kāi)子組件的事件中將該值設(shè)置為true,此時(shí)子頁(yè)面為以創(chuàng)建
<!-- 子組件,使用v-if接收,定義ok方法接收子傳遞過(guò)來(lái)的布爾值,
需要注意。ok應(yīng)和子頁(yè)面中定義的保持一致,這個(gè)e就代表的是子頁(yè)面colse方法傳遞過(guò)來(lái)的值,
該值為false,然后我們將false賦值給是否銷毀標(biāo)識(shí)
-->
<aaa v-if=isExist @ok="e=>isExist=e"></aaa>
//定義是否銷毀標(biāo)識(shí),默認(rèn)為false,代表銷毀
const isExist = ref(false);父頁(yè)面通過(guò)點(diǎn)擊button打開(kāi)子組件的事件
const showManage = (row) => {
openDialog({}).then(resp => {
isExist.value = true
// 具體業(yè)務(wù)邏輯.....
})
}至此就完成了通過(guò)v-if 和子父組件傳值的方法來(lái)銷毀子頁(yè)面的需求,實(shí)現(xiàn)了打開(kāi)子頁(yè)面請(qǐng)求數(shù)據(jù)后,再不刷新地址欄的情況下,再次打開(kāi)子頁(yè)面彈窗時(shí),上一次請(qǐng)求的數(shù)據(jù)被清空,相當(dāng)于重新創(chuàng)建了一個(gè)子頁(yè)面。但是并不建議這樣做,因?yàn)橹貜?fù)創(chuàng)建dom元素。我這里由于子頁(yè)面中數(shù)據(jù)有很多,并且子頁(yè)面中還嵌套了子頁(yè)面,要想實(shí)現(xiàn)清空數(shù)據(jù),目前我想到的解決方法就是創(chuàng)建,銷毀子頁(yè)面。歡迎其他大佬指正更好的實(shí)現(xiàn)方式。
到此這篇關(guān)于vue3 銷毀組件方法的文章就介紹到這了,更多相關(guān)vue3 銷毀組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用 vue.js 構(gòu)建大型單頁(yè)應(yīng)用
本文給大家詳細(xì)介紹了如何使用使用 vue.js腳手架工具vue-cli構(gòu)建大型單頁(yè)應(yīng)用的方法,非常的實(shí)用,有需要的小伙伴可以參考下2018-02-02
關(guān)于Vite不能使用require問(wèn)題的解決方法
在vue2中我們通常會(huì)在模板中通過(guò)三目運(yùn)算符和require來(lái)實(shí)現(xiàn)動(dòng)態(tài)圖片,下面這篇文章主要給大家介紹了關(guān)于Vite不能使用require問(wèn)題的解決方法,需要的朋友可以參考下2022-10-10
vue3使用ref 獲取不到子組件屬性問(wèn)題的解決辦法
父子組件使用<script setup>語(yǔ)法糖,父組件通過(guò)給子組件定義ref訪問(wèn)子組件內(nèi)部屬性或事件,本文給大家介紹了解決vue3使用ref 獲取不到子組件屬性問(wèn)題,文中通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-06-06
Vue?Router4路由導(dǎo)航守衛(wèi)實(shí)例全面解析
這篇文章主要為大家介紹了Vue?Router4路由導(dǎo)航守衛(wèi)實(shí)例全面解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
vue使用路由守衛(wèi)實(shí)現(xiàn)菜單的權(quán)限設(shè)置
我們使?vue-element-admin前端框架開(kāi)發(fā)后臺(tái)管理系統(tǒng)時(shí),?般都會(huì)涉及到菜單的權(quán)限控制問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于vue使用路由守衛(wèi)實(shí)現(xiàn)菜單的權(quán)限設(shè)置的相關(guān)資料,需要的朋友可以參考下2023-06-06
electron中使用本地?cái)?shù)據(jù)庫(kù)的方法詳解
眾所周知,electron是可以開(kāi)發(fā)桌面端的框架,那我們有一些數(shù)據(jù)不想讓別人看到,只能在自己的電腦上展示時(shí)怎么辦呢,這個(gè)時(shí)候就可以用到本地?cái)?shù)據(jù)庫(kù),本文將以sqlite3為例介紹一下electron如何使用本地?cái)?shù)據(jù)庫(kù)2023-10-10

