Vue3獲取元素DOM的兩種方法
Vue3中獲取dom的方法有兩種 : ref模板引用和傳統(tǒng)方法
1.ref模板引用
模板引用是官方提出的方法,請看下面的例子:
<template>
<canvas ref="solarCanvas" id="solar" width="1300" height="900"></canvas>
</template>
<script setup>
import { onMounted, ref } from 'vue'
const solarCanvas = ref(null)
onMounted(() => {
console.log(solarCanvas.value)//HTMLCanvasElement{...}
})
</script>這里要注意的是只可以在組件掛載后才能訪問模板引用 ,上面的例子中onMounted執(zhí)行時組件已經(jīng)掛載了 , 所以打印solarCanvas有值。
<template>
<canvas ref="solarCanvas" id="solar" width="1300" height="900"></canvas>
</template>
<script setup>
import { onMounted, ref } from 'vue'
const solarCanvas = ref(null)
console.log(solarCanvas.value)//null
</script>反之,如果這樣寫打印出來的值就為null,因為此時組件還沒有掛載完成。
2.傳統(tǒng)方法
傳統(tǒng)方法就是指使用JS原生的獲取dom的方法,如:getElementById、querySelector等。請看下面的例子:
<template>
<canvas id="solar" width="1300" height="900"></canvas>
</template>
<script setup>
import { nextTick, onMounted, ref } from 'vue'
onMounted(() => {
const canvas = document.getElementById('solar')
console.log(canvas)//HTMLCanvasElement{...}
})
</script>拓展:Vue3獲取DOM節(jié)點的幾種方式
1 .原生js獲取 DOM 節(jié)點:
document.querySelector(選擇器) document.getElementById(id選擇器) document.getElementsByClassName(class選擇器) ....
2. vue2中獲取當(dāng)前組件的實例對象:
因為每個 vue 的組件實例上,都包含一個 $refs 對象,里面存儲著對應(yīng)的 DOM 元素或組件的引用。所以在默認(rèn)情況下, 組件的 $refs 指向一個空對象 。
可以先在組件上加上 ref="名字" ,然后通過 this.$refs.名字 獲取相應(yīng)元素并進(jìn)行操作。
<template>
<div class="box">
<h1 ref="divDom">這是一個測試樣例</h1>
<button ref="but">按鈕</button>
</div>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
showThis(){
// h1的實例對象
console.log(this);
this.$refs.divDom.style.color='yellow'
//引用到組件的實例之后,也可以調(diào)用組件上的 methods方法
this.$refs.but.click();
},
},
}
</script>3.vue3中獲取當(dāng)前組件的實例對象:
在Vue3框架里面是解除了this這個對象,所以無法使用this.$refs的方式獲取自定義組件 ref 的DOM節(jié)點。
但是vue3中自帶了能返回當(dāng)前組件實例對象的函數(shù) getCurrentInstance,通過該函數(shù)獲取對象節(jié)能看到該對象包含界面中的refs。
<template>
<div ref="divDom"></div>
</template>
<script setup>
import { ref, getCurrentInstance } from 'vue';
const divDom = ref(null);
onMounted(()=>{
console.log('獲取dom元素',divDom)
})
// 獲取頁面的實例對象
const pageInstance = getCurrentInstance();
// 獲取dom節(jié)點對象
const tagDomObj = pageInstance.refs.divDom;
</script>3.結(jié)論
在Vue3當(dāng)獲取DOM的方法主要有兩個:模板引用和傳統(tǒng)方法。
但需要注意的是,無論使用哪種方法都只有在組件掛載之后才能獲取到DOM,可以使用watch或onMounted確保自己已經(jīng)獲取到DOM。
到此這篇關(guān)于Vue3獲取元素DOM的兩種方法的文章就介紹到這了,更多相關(guān)Vue3獲取DOM內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-treeselect無法點擊問題(點擊無法出現(xiàn)拉下菜單)
這篇文章主要介紹了vue-treeselect無法點擊問題(點擊無法出現(xiàn)拉下菜單),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04
vue利用sync語法糖實現(xiàn)modal彈框的項目實踐
本文主要介紹了vue利用sync語法糖實現(xiàn)modal彈框的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Vue3 openlayers加載瓦片地圖并手動標(biāo)記坐標(biāo)點功能
這篇文章主要介紹了 Vue3 openlayers加載瓦片地圖并手動標(biāo)記坐標(biāo)點功能,我們這里用vue/cli創(chuàng)建,我用的node版本是18.12.1,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
vue中element-ui表格縮略圖懸浮放大功能的實例代碼
element-ui界面非常簡潔和美觀,提供的組件可以滿足絕大多數(shù)的應(yīng)用場景,當(dāng)表格中顯示了圖片的縮略圖時,想要鼠標(biāo)浮動在縮略圖上時放大圖片的效果,該如何實現(xiàn)呢?下面小編通過實例代碼給大家介紹vue中element-ui表格縮略圖懸浮放大功能,一起看看吧2018-06-06
利用vue-router實現(xiàn)二級菜單內(nèi)容轉(zhuǎn)換
這篇文章主要介紹了如何利用vue-router實現(xiàn)二級菜單內(nèi)容轉(zhuǎn)換,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11

