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中獲取當前組件的實例對象:
因為每個 vue 的組件實例上,都包含一個 $refs 對象,里面存儲著對應的 DOM 元素或組件的引用。所以在默認情況下, 組件的 $refs 指向一個空對象 。
可以先在組件上加上 ref="名字" ,然后通過 this.$refs.名字 獲取相應元素并進行操作。
<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中獲取當前組件的實例對象:
在Vue3框架里面是解除了this這個對象,所以無法使用this.$refs的方式獲取自定義組件 ref 的DOM節(jié)點。
但是vue3中自帶了能返回當前組件實例對象的函數(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當獲取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 cli3 實現(xiàn)分環(huán)境打包的步驟
這篇文章主要介紹了vue cli3 實現(xiàn)分環(huán)境打包的步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03
Vue3?中的?readonly?特性及函數(shù)使用詳解
readonly是Vue3中提供的一個新特性,用于將一個響應式對象變成只讀對象,這篇文章主要介紹了Vue3?中的?readonly?特性詳解,需要的朋友可以參考下2023-04-04
Vue項目中實現(xiàn)描點跳轉(zhuǎn)scrollIntoView的案例
這篇文章主要介紹了Vue項目中實現(xiàn)描點跳轉(zhuǎn)scrollIntoView的案例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

