最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3 setup訪問子組件的 DOM 元素的示例代碼

 更新時間:2023年08月29日 09:37:58   作者:ZerlinM  
使用setup的情況下這個時候我們無法使用this,注意在setup中setup是封閉的,不會將子組件事件暴露出來,所以要用defineExpose(),這篇文章主要介紹了vue3 setup訪問子組件的 DOM 元素,需要的朋友可以參考下

vue3 setup訪問子組件的 DOM 元素

使用setup的情況下這個時候我們無法使用this,注意在setup中setup是封閉的,不會將子組件事件暴露出來,所以要用defineExpose(),將需要在父組件調(diào)用的函數(shù)暴露出去,子組件代碼如下:

<template>
  <div ref="domRef">
    <div>哈哈哈哈</div>
  </div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const domRef = ref(null)
const getRef = () => {
  return domRef.value
}
defineExpose({
  getRef
})
</script>

父組件:

<template>
  <PointPopup ref="popupRef" />
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import PointPopup from './components/PointPopup.vue'
const popupRef = ref(null)
onMounted(() => {
  // 打印子組件DOM
  console.log('child', popupRef?.value?.getRef())
})

這種方法通常不需要考慮異步渲染的問題,是因為在子組件的 defineExpose 中,直接將 DOM 引用暴露給了父組件,而不需要等待異步操作完成。
通過使用 defineExpose 拋出 getDom 函數(shù),在父組件中訪問子組件的 DOM 元素。在這種情況下,getDom 函數(shù)返回的是 inpRef.value,即子組件的 DOM 元素。
因為這個引用是直接通過 ref 創(chuàng)建的,并在子組件的 defineExpose 中暴露給父組件,所以不需要考慮異步渲染的問題。當(dāng)父組件的 mounted 鉤子函數(shù)執(zhí)行時,子組件的 defineExpose 已經(jīng)完成,并且可以直接訪問子組件的 DOM 元素。
所以,通過在子組件中拋出 DOM 的方式,可以直接在父組件中訪問子組件的 DOM 元素,而不需要考慮異步渲染的延遲問題。也就無需加nextTick()。

vue3訪問子組件的 DOM 元素的方法總結(jié)

在 Vue 3 中,訪問子組件的 DOM 元素是一個常見的需求。本文將介紹如何在 Vue 3 中使用不同的方法來獲取子組件的 DOM 元素。

方法一

使用refrefs:在父組件中,可以通過 refrefs 來獲取子組件的 DOM 元素。在模板中使用 ref 聲明引用變量,并將其綁定到子組件的 ref 屬性上。然后,在父組件的鉤子函數(shù)(如 mounted)中,通過 this.refs 訪問子組件的引用,使用 .{refName} 來訪問子組件實例的屬性和方法。通過 .$el 可以獲取子組件的 DOM 元素。

方法二

< script setup> 中訪問子組件的 DOM 元素:在 Vue 3 中,可以使用 < script setup> 區(qū)塊和 Composition API 的語法來編寫組件邏輯。在父組件的 < script setup> 區(qū)塊中,可以使用 onMounted 鉤子函數(shù)來訪問子組件的 DOM 元素。使用 ref 創(chuàng)建引用并綁定到子組件的 ref 屬性上,然后在 onMounted 鉤子函數(shù)中使用 childRef.value.$el 來訪問子組件的 DOM 元素。

實例演示

image.png

image.png

但是會出現(xiàn)這種情況:對于父組件的 mounted 鉤子函數(shù),確實表示父組件的模板已經(jīng)被渲染成真實的 DOM。在大多數(shù)情況下,子組件也應(yīng)該在父組件的 mounted 鉤子函數(shù)執(zhí)行時已經(jīng)被渲染完成。然而,由于 Vue 的異步渲染策略,某些情況下子組件的 DOM 元素可能仍然未完全渲染。這種情況通常發(fā)生在以下情況下:

  • 子組件包含異步操作或延遲加載的內(nèi)容:如果子組件內(nèi)部包含異步操作,例如從服務(wù)器加載數(shù)據(jù)或執(zhí)行動畫效果,子組件的 DOM 元素可能需要更長的時間才能完全渲染。
  • 父組件與子組件之間存在過渡效果:如果在父組件中使用了過渡效果(例如 < transition> 或 < transition-group>),那么在父組件的 mounted 鉤子函數(shù)中訪問子組件的 DOM 元素時,可能會遇到過渡效果尚未完成的情況。

在這些情況下,盡管父組件的模板已經(jīng)被渲染成真實的 DOM,但子組件的 DOM 元素可能尚未完全渲染。因此,在父組件的 mounted 鉤子函數(shù)中立即訪問子組件的 DOM 元素可能會導(dǎo)致獲取到不完整或錯誤的信息。

1.使用 nextTick( ) 解決異步渲染問題:在某些情況下,子組件的 DOM 元素可能尚未完全渲染,即使在父組件的 mounted 鉤子函數(shù)中。這是因為 Vue 的異步渲染策略。為了解決這個問題,可以使用 nextTick() 函數(shù),在父組件的 mounted 鉤子函數(shù)中等待子組件的 DOM 元素渲染完成后再進(jìn)行操作。通過 nextTick() 函數(shù)可以確保獲取到正確的子組件 DOM 元素。 方法三

使用setup的情況下這個時候我們無法使用this,注意在setup中setup是封閉的,不會將子組件事件暴露出來,所以要用defineExpose(),將需要在父組件調(diào)用的函數(shù)暴露出去,子組件代碼如下:

image.png

父組件代碼如下:

image.png

這種方法通常不需要考慮異步渲染的問題,是因為在子組件的 defineExpose 中,直接將 DOM 引用暴露給了父組件,而不需要等待異步操作完成。通過使用 defineExpose 拋出 getDom 函數(shù),在父組件中訪問子組件的 DOM 元素。在這種情況下,getDom 函數(shù)返回的是 inpRef.value,即子組件的 DOM 元素。因為這個引用是直接通過 ref 創(chuàng)建的,并在子組件的 defineExpose 中暴露給父組件,所以不需要考慮異步渲染的問題。當(dāng)父組件的 mounted 鉤子函數(shù)執(zhí)行時,子組件的 defineExpose 已經(jīng)完成,并且可以直接訪問子組件的 DOM 元素。所以,通過在子組件中拋出 DOM 的方式,可以直接在父組件中訪問子組件的 DOM 元素,而不需要考慮異步渲染的延遲問題。也就無需加nextTick().

通過上述方法,可以在 Vue 3 中輕松地訪問子組件的 DOM 元素。這對于執(zhí)行諸如測量元素大小、計算位置、添加樣式等操作非常有用。

到此這篇關(guān)于vue3 setup訪問子組件的 DOM 元素的文章就介紹到這了,更多相關(guān)vue3 setup DOM 元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue使用pdf.js預(yù)覽pdf文件的方法

    vue使用pdf.js預(yù)覽pdf文件的方法

    在頁面進(jìn)行pdf預(yù)覽的時候,由于文件不能夠打印和下載很難滿足客戶的需求,接下來通過本文給大家介紹vue使用pdf.js來進(jìn)行pdf預(yù)覽,需要的朋友可以參考下
    2021-12-12
  • JavaScript獲取echart曲線上任意點位的值詳解

    JavaScript獲取echart曲線上任意點位的值詳解

    這篇文章主要為大家介紹了JavaScript獲取echart曲線上任意點位的值詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • vue列表單項展開收縮功能之this.$refs的詳解

    vue列表單項展開收縮功能之this.$refs的詳解

    這篇文章主要介紹了vue列表單項展開收縮功能之this.$refs的詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 富文本編輯器vue2-editor實現(xiàn)全屏功能

    富文本編輯器vue2-editor實現(xiàn)全屏功能

    這篇文章主要介紹了富文本編輯器vue2-editor實現(xiàn)全屏功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • vue3 useRoute無法獲取get參數(shù)的問題解決

    vue3 useRoute無法獲取get參數(shù)的問題解決

    本文主要介紹了vue3 useRoute無法獲取get參數(shù)的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • Pinia 的 Setup Stores 語法使用實例詳解

    Pinia 的 Setup Stores 語法使用實例詳解

    這篇文章主要為大家介紹了Pinia 的 Setup Stores 語法使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • vue實現(xiàn)大轉(zhuǎn)盤抽獎功能

    vue實現(xiàn)大轉(zhuǎn)盤抽獎功能

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)大轉(zhuǎn)盤抽獎功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • uniapp組件uni-file-picker中設(shè)置使用照相機(jī)和相冊權(quán)限的操作方法

    uniapp組件uni-file-picker中設(shè)置使用照相機(jī)和相冊權(quán)限的操作方法

    這篇文章主要介紹了uniapp組件uni-file-picker中設(shè)置使用照相機(jī)和相冊的權(quán)限,在uniapp中,我們通常會使用uni-file-picker這個組件,但是這個組件中,有點缺陷,就是沒有對這個功能的傳值設(shè)置,這里就要給組件進(jìn)行修改了,需要的朋友可以參考下
    2022-11-11
  • vue使用html2canvas和jspdf將html轉(zhuǎn)成pdf

    vue使用html2canvas和jspdf將html轉(zhuǎn)成pdf

    在前端開發(fā)中, html轉(zhuǎn)pdf是最常見的需求,下面這篇文章主要給大家介紹了關(guān)于vue如何使用html2canvas和jspdf將html轉(zhuǎn)成pdf的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • vue實現(xiàn)樹形表格

    vue實現(xiàn)樹形表格

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)樹形表格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

分宜县| 黄山市| 英超| 连平县| 铜陵市| 应城市| 望都县| 沅江市| 伊川县| 德惠市| 丰城市| 天长市| 泰州市| 大同市| 山东省| 南乐县| 新干县| 固安县| 岱山县| 万安县| 诸城市| 东乌珠穆沁旗| 南平市| 麻栗坡县| 许昌市| 东乌珠穆沁旗| 靖西县| 乐清市| 五指山市| 永昌县| 南宁市| 宁阳县| 瓮安县| 临西县| 常德市| 临汾市| 鄄城县| 廊坊市| 马鞍山市| 遵义市| 望奎县|