vue3標(biāo)簽中的ref屬性詳解及如何使用$refs獲取元素
- 用在普通DOM標(biāo)簽上,獲取的是DOM節(jié)點(diǎn)。
- 用在組件標(biāo)簽上,獲取的是組件實(shí)例對象。
用在普通DOM標(biāo)簽中
獲取dom元素方法一:
- 在需要獲取的元素標(biāo)簽上添加ref屬性
- 創(chuàng)建ref對象,存儲ref屬性標(biāo)記的內(nèi)容
- 通過ref上的value屬性即可獲取當(dāng)前dom元素
<template> <p>{{ person.name }}</p> <!--1.在標(biāo)簽上寫上ref屬性--> <div ref="msg">{{ person.age }}</div> <p>{{ person.gender }}</p> <button @click="getEle">獲取元素</button> </template> <script setup> import { ref, reactive, computed, getCurrentInstance, onMounted } from "vue"; const person = reactive({ name: "neko", age: 18, gender: "女", }); //2.創(chuàng)建一個引用變量去存儲對div標(biāo)簽的引用 let msg = ref(); //3.獲取元素 const getEle = () => { console.log(msg.value); // <div>18</div> }; </script>
獲取dom元素方法二:
getCurrentInstance():獲取當(dāng)前組件實(shí)例
- 在需要獲取的元素標(biāo)簽上添加ref屬性
- 通過getCurrentInstance解構(gòu)出proxy
- 通過proxy.$refs.xxx即可獲取當(dāng)前dom元素
<template> <p>{{ person.name }}</p> <!--1.在標(biāo)簽上寫上ref屬性--> <div ref="msg">{{ person.age }}</div> <p>{{ person.gender }}</p> <button @click="getEle">獲取元素</button> </template> <script setup> import { ref, reactive, computed, getCurrentInstance, onMounted } from "vue"; //2.通過getCurrentInstance解構(gòu)出proxy const { proxy } = getCurrentInstance(); const person = reactive({ name: "neko", age: 18, gender: "女", }); //3.獲取元素 const getEle = () => { console.log(proxy.$refs.msg); // <div>18</div> }; </script>
用在組件標(biāo)簽上
defineExpose作用:向外暴露屬性
<!-- 父組件 --> <template> <Demo ref="demoRef"></Demo> </template> <script setup> import { ref, onMounted } from "vue"; import Demo from "./components/Demo.vue"; let demoRef = ref(); onMounted(() => { console.log(demoRef.value); // 訪問子組件Demo中的屬性 }); </script> <!-- 子組件 --> <template> <p>{{ person.name }}</p> <div>{{ person.age }}</div> <p>{{ person.gender }}</p> </template> <script setup> import { ref, reactive, computed, getCurrentInstance, onMounted } from "vue"; const person = reactive({ name: "neko", age: 18, gender: "女", }); let num1 = ref(0); let num2 = ref(1); let num3 = ref(2); <!-- 使用defineExpose將組件中的數(shù)據(jù)交給外部,這樣父組件中的demoRef.value才可以訪問到如下數(shù)據(jù) --> defineExpose({ num1, num2, num3, person }); </script>
總結(jié)
到此這篇關(guān)于vue3標(biāo)簽中的ref屬性詳解及如何使用$refs獲取元素的文章就介紹到這了,更多相關(guān)vue3 $refs獲取元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)圖片下載點(diǎn)擊按鈕彈出本地窗口選擇自定義保存路徑功能
vue前端實(shí)現(xiàn)前端下載,并實(shí)現(xiàn)點(diǎn)擊按鈕彈出本地窗口,選擇自定義保存路徑,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-12-12vue前端自適應(yīng)布局實(shí)現(xiàn)教程(一步到位所有自適應(yīng))
?自適應(yīng)布局是一種根據(jù)不同的設(shè)備屏幕分辨率進(jìn)行布局的方式,它為不同的屏幕分辨率定義了不同的布局,下面這篇文章主要給大家介紹了關(guān)于vue前端自適應(yīng)布局實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2024-08-08vue中關(guān)于router.beforeEach()的用法
這篇文章主要介紹了vue中關(guān)于router.beforeEach()的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11vue中使用iframe嵌入網(wǎng)頁,頁面可自適應(yīng)問題
這篇文章主要介紹了vue中使用iframe嵌入網(wǎng)頁,頁面可自適應(yīng)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09Vue為何棄用Ajax,選擇Axios?ajax與axios的區(qū)別?
ajax技術(shù)實(shí)現(xiàn)了局部數(shù)據(jù)的刷新,axios實(shí)現(xiàn)了對ajax的封裝;axios有的ajax都有,ajax有的axios不一定有??偨Y(jié)一句話就是axios是ajax,ajax不止axios。2023-01-01Vue-cli框架實(shí)現(xiàn)計時器應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Vue-cli框架實(shí)現(xiàn)計時器應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08vscode 使用Prettier插件格式化配置使用代碼詳解
這篇文章主要介紹了vscode 使用Prettier插件格式化配置使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08