欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

手動掛載Vue3.0組件到DOM節(jié)點(diǎn)的方法

 更新時(shí)間:2024年08月29日 10:45:15   作者:Cougars  
在VUE應(yīng)用中,經(jīng)常會使用一些非vue實(shí)現(xiàn)的js庫,這些js庫可能要求外部傳入一些界面DOM節(jié)點(diǎn),本文主要介紹了手動掛載Vue3.0組件到DOM節(jié)點(diǎn)的方法,感興趣的可以了解一下

、問題

在VUE應(yīng)用中,經(jīng)常會使用一些非vue實(shí)現(xiàn)的js庫,這些js庫可能要求外部傳入一些界面DOM節(jié)點(diǎn),但該界面通常是vue組件定義,無法直接傳遞給js庫,那么vue組件如何生成DOM節(jié)點(diǎn)傳遞給js庫?比如在開發(fā)地圖應(yīng)用中,地圖引擎通常是純js庫,當(dāng)點(diǎn)擊地圖上的信息點(diǎn)彈出信息框時(shí),地圖引擎庫要求傳入信息框的dom節(jié)點(diǎn),通常該信息框由vue組件實(shí)現(xiàn),無法直接傳遞給地圖引擎庫,需將vue組件手動生成dom節(jié)點(diǎn),才能傳遞給地圖引擎。

二、手動掛載vue組件

vue組件手動生成dom節(jié)點(diǎn)主要通過以下兩個(gè)函數(shù):

(1)createVNode函數(shù):由組件對象生成一個(gè)虛擬節(jié)點(diǎn)。

(2)render函數(shù):把一個(gè)虛擬節(jié)點(diǎn)掛載到一個(gè)dom節(jié)點(diǎn)上。

因此要把vue組件掛載在dom節(jié)點(diǎn)可以如下調(diào)用:

import  myPopupComp from "./myPopupComp .vue"; //我們寫的組件
import {createVNode,render,getCurrentInstance} from "vue";
const parentNode=docuemnt.createElement("div");
const vNode=createVNode(myPopupComp,{}/*組件要傳遞的參數(shù)*/);
const appContext=getCurrentInstance().appContext;/*獲取app的上下文,
注意:如果getCurrentInstance沒法返回當(dāng)前的組件實(shí)例,
可以將函數(shù)放到組件的setup中執(zhí)行,然后通過變量記錄該實(shí)例。
也可以在主函數(shù)createApp時(shí),把a(bǔ)pp傳遞進(jìn)來。*/
vNode.appContext=appContext;/*將vue組件關(guān)聯(lián)到當(dāng)前app下管理,
如果這個(gè)appContext是單獨(dú)創(chuàng)建,那么原來app相關(guān)的資源將不能用,
如:router,全局組件等等,都需要重新創(chuàng)建。*/
render(vNode,parentNode);//將組件掛載到parentNode下。

于是parentNode就包含了組件生成的節(jié)點(diǎn),這個(gè)parentNode就可以掛載到地圖的popup組件上。

注意:掛載時(shí),需要將當(dāng)前app的appContext傳遞給組件,否則組件不能使用當(dāng)前app的資源,包括路由、界面框架、狀態(tài)等全局組件,無法與當(dāng)前app交互。

三、卸載vue組件

(1)手動卸載組件

手動掛載到dom節(jié)點(diǎn)的vue組件不會自動卸載,可能會造成內(nèi)存泄漏(是否泄漏具體沒研究過,但如果沒有卸載,組件的onUnmounted不會被調(diào)用,導(dǎo)致有些內(nèi)部的依賴該回調(diào)的功能出現(xiàn)問題)。卸載組件沒有單獨(dú)的方法,復(fù)用render方法:

render(null,parentNode);

(2)自動卸載組件

在某些情況下,我們想隨著dom node的生命周期結(jié)束,一起自動卸載組件,如:地圖的popup組件的生命周期是由地圖管理的,地圖刪除popup節(jié)點(diǎn)時(shí),刪除對應(yīng)的vue組件,可采用如下方式,增加對組件節(jié)點(diǎn)被刪除事件的監(jiān)聽,在刪除時(shí),卸載vue組件:

parentNode.addEventListener("DOMNodeRemovedFromDocument",()=>render(null,parentNode));

四、與用createApp掛載的區(qū)別

將vue組件掛載到dom節(jié)點(diǎn)還有另一種方法,就是利用createApp直接創(chuàng)建一個(gè)app,然后mount到一個(gè)dom節(jié)點(diǎn)上。類似如下代碼:

import {createApp} from "vue";
import myComp from "./myComp.vue"; //我的組件

//待掛載的節(jié)點(diǎn)
const domNode=document.CreateElement("div");
//創(chuàng)建app
const app=createApp(myComp,{/*組件的參數(shù)*/});
//將app掛載到節(jié)點(diǎn)上
app.mount(domNode);

這種方法的vue組件運(yùn)行在獨(dú)立的app下,無法使用主app所注冊的路由、狀態(tài)、界面框架等全局資源,如果要使用,需要重新建立主app所創(chuàng)建的環(huán)境。所以這種方式并不適合我們的使用場景。

五、小結(jié)

在Vue應(yīng)用中,如果需要將某個(gè)vue組件提供給其他不支持vue的js框架,可采用此方法將vue組件生成的dom節(jié)點(diǎn)傳遞給框架,同時(shí)保持該vue組件可與當(dāng)前應(yīng)用交互。

到此這篇關(guān)于手動掛載Vue3.0組件到DOM節(jié)點(diǎn)的方法的文章就介紹到這了,更多相關(guān)Vue手動掛載到DOM節(jié)點(diǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VUE3使用Element-Plus時(shí)如何修改ElMessage中的文字大小

    VUE3使用Element-Plus時(shí)如何修改ElMessage中的文字大小

    在使用Element-plus的Elmessage時(shí)使用默認(rèn)的size無法滿足我們的需求時(shí),我們可以自定義字體的大小,但是直接重寫樣式后,并沒有起作用,甚至使用::v-deep深度選擇器也沒有效果,本文介紹VUE3使用Element-Plus時(shí)如何修改ElMessage中的文字大小,感興趣的朋友一起看看吧
    2023-09-09
  • Vue3.0監(jiān)聽器watch與watchEffect詳解

    Vue3.0監(jiān)聽器watch與watchEffect詳解

    在 Vue 3 中,watch 仍然是一種用于監(jiān)聽數(shù)據(jù)變化并執(zhí)行相應(yīng)操作的方式,不過在組合式 API 中,watch 的使用方式與選項(xiàng)式 API 略有不同,這篇文章主要介紹了Vue3.0監(jiān)聽器watch與watchEffect,需要的朋友可以參考下
    2023-12-12
  • Nuxt使用Vuex解讀

    Nuxt使用Vuex解讀

    這篇文章主要介紹了Nuxt使用Vuex的方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • element的表單元素使用總結(jié)

    element的表單元素使用總結(jié)

    表單元素挺多的,本文主要介紹了element的表單元素使用總結(jié),主要包括文本框類、選擇類、其他類,有一定的參考價(jià)值,感興趣的可以了解一下
    2021-06-06
  • Vuex Store 數(shù)據(jù)在頁面刷新后丟失的解決方法

    Vuex Store 數(shù)據(jù)在頁面刷新后丟失的解決方法

    當(dāng)我們使用 Vue.js 和 Vuex 進(jìn)行狀態(tài)管理時(shí),一個(gè)常見的問題是頁面刷新會導(dǎo)致 Vuex store 中的數(shù)據(jù)丟失,本文將詳細(xì)介紹解決 Vuex Store 數(shù)據(jù)在頁面刷新后丟失的方法,感興趣的朋友一起看看吧
    2024-08-08
  • Vue.js桌面端自定義滾動條組件之美化滾動條VScroll

    Vue.js桌面端自定義滾動條組件之美化滾動條VScroll

    這篇文章主要給大家介紹了關(guān)于Vue.js桌面端自定義滾動條組件之美化滾動條VScroll的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 在Vue中使用icon 字體圖標(biāo)的方法

    在Vue中使用icon 字體圖標(biāo)的方法

    這篇文章主要介紹了在Vue中使用icon 字體圖標(biāo)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • 關(guān)于vue組件事件屬性穿透詳解

    關(guān)于vue組件事件屬性穿透詳解

    今天小編就為大家分享一篇關(guān)于vue組件事件屬性穿透詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • vue-cli單頁面預(yù)渲染seo-prerender-spa-plugin操作

    vue-cli單頁面預(yù)渲染seo-prerender-spa-plugin操作

    這篇文章主要介紹了vue-cli單頁面預(yù)渲染seo-prerender-spa-plugin操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 關(guān)于在vscode使用webpack指令顯示

    關(guān)于在vscode使用webpack指令顯示"因?yàn)樵诖讼到y(tǒng)中禁止運(yùn)行腳本"問題(完美解決)

    這篇文章主要介紹了解決在vscode使用webpack指令顯示"因?yàn)樵诖讼到y(tǒng)中禁止運(yùn)行腳本"問題,本文給大家分享完美解決方法,需要的朋友可以參考下
    2021-07-07

最新評論