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

vue3?setup語法糖中獲取slot插槽的dom對象代碼示例

 更新時間:2024年04月19日 10:03:52   作者:WJP丶  
slot元素是一個插槽出口,標示了父元素提供的插槽內容將在哪里被渲染,這篇文章主要給大家介紹了關于vue3?setup語法糖中獲取slot插槽的dom對象的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

最近使用vue3開發(fā)項目,需要封裝一個無限滾動的組件,使用scroll組件內置插槽接受模板的方式,所以需要在scroll組件內獲取到模板渲染后dom元素的寬高。

但是setup語法糖是組件生命周期的beforeCreate和created中,而且經過測試,在mounted函數中的el屬性也是null,所以得出結論模板的slot.default無法直接獲取, 必須通過 render 方式對 slot 的 vnode 進行渲染,然后在 render 組件中的 mounted 方法中才能獲取到。如下面的例子

容器組件 ScrollView

//ScrollView.vue  scroll容器組件
<script setup lang="ts">
 import { ref, useSlots } from 'vue'
 import createSlot from '../vnode/createSlot'
 const slot = useSlots()
 // 這里獲取到的是默認插槽的vnode,但拿不到對應的dom實例
 const defaultSlot = slots.default && slots.default()[0]

 // 自定義template 內容mounted事件
 const mountedCallFun = (args)=> {
  console.log('mounted', args)
 }
 // 自定義template 內容updated事件
 const updatedCallFun = (args)=> {
  console.log(args)
 }
 // 自定義template 內容unMounted卸載事件
 const unmountedCallFun = (args)=> {
  console.log(args)
 }
 const mySlot = createSlot({mountedCallFun, updatedCallFun, unmountedCallFun})
 onMounted(() => {
  // 即使在該組件的mounted鉤子中,這個defaultSlot的$el依然為null
  console.log('defaultSlot', defaultSlot)
 })
</script>

<template>
  <div>
    <mySlot :vnode="defaultSlot"></mySlot>
  </div>
</template>

render函數渲染slot內容的工廠函數 createSlots.ts

通過 vue官方提供的 defineComponent創(chuàng)建一個組件裝載 scrollView組件中的 插槽內容:

//createSlots.ts
import { defineComponent, h } from "vue"
type CallFun = (vnodeEl: HTMLElement) => void
type Funs = Record<'mountedCallFun'| 'updatedCallFun'| 'unmountedCallFun', CallFun>
export default ({mountedCallFun, updatedCallFun, unmountedCallFun}: Funs) => {
  return defineComponent({
    props: ['vnode'],
    setup(props, ctx){
      console.log(props, ctx)
    },
    mounted() {
      // console.log(this.$el)
      mountedCallFun(this.$el)
    },
    render(props: any, ctx: any) {
      console.log(props, ctx)
      return props.vnode
    }
  })
}

測試使用 ScrollView組件

<script setup lang="ts">
  import Text from '../components/text.vue'
  import ScrollView from '../components/ScrollView.vue'
</script>

<template>
  <div>
    <ScrollView>
      <h2 >測試使用 ScrollView組件測試使用 ScrollView組件</h2>
      <h2 >測試使用 ScrollView組件測試使用 ScrollView組件</h2>
      <h2 >測試使用 ScrollView組件測試使用 ScrollView組件</h2>
      <h2 >測試使用 ScrollView組件測試使用 ScrollView組件</h2>
    </ScrollView>
  </div>
</template>

總結  

到此這篇關于vue3 setup語法糖中獲取slot插槽的dom對象的文章就介紹到這了,更多相關vue3獲取slot插槽dom對象內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue3 style CSS 變量注入的實現

    Vue3 style CSS 變量注入的實現

    本文主要介紹了Vue3 style CSS 變量注入的實現,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • vuex實現數據狀態(tài)持久化

    vuex實現數據狀態(tài)持久化

    今天小編就為大家分享一篇vuex實現數據狀態(tài)持久化,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue為何棄用Ajax,選擇Axios?ajax與axios的區(qū)別?

    Vue為何棄用Ajax,選擇Axios?ajax與axios的區(qū)別?

    ajax技術實現了局部數據的刷新,axios實現了對ajax的封裝;axios有的ajax都有,ajax有的axios不一定有。總結一句話就是axios是ajax,ajax不止axios。
    2023-01-01
  • 基于vue打包后字體和圖片資源失效問題的解決方法

    基于vue打包后字體和圖片資源失效問題的解決方法

    下面小編就為大家分享一篇基于vue打包后字體和圖片資源失效問題的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 詳解vue-router基本使用

    詳解vue-router基本使用

    本篇文章主要介紹了詳解vue-router基本使用,詳細的介紹了vue-router的概念和用法,有興趣的可以了解一下。
    2017-04-04
  • 淺析Vue.js 中的條件渲染指令

    淺析Vue.js 中的條件渲染指令

    這篇文章主要介紹了Vue.js 中的條件渲染指令,Vue.js 中的條件渲染指令可以根據表達式的值,來決定在 DOM 中是渲染還是銷毀元素或組件。本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11
  • 簡單了解vue中的v-if和v-show的區(qū)別

    簡單了解vue中的v-if和v-show的區(qū)別

    這篇文章主要介紹了簡單了解vue中的v-if和v-show的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • Vue編寫多地區(qū)選擇組件

    Vue編寫多地區(qū)選擇組件

    這篇文章主要為大家詳細介紹了Vue編寫一個挺靠譜的多地區(qū)選擇組件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解vue3+electron如何做到本地化

    詳解vue3+electron如何做到本地化

    要在Vue?3和Electron中實現本地化,可以使用類似于在Vue項目中進行本地化的方式,本文為大家介紹了一種常見的做法,希望對大家有所幫助
    2024-03-03
  • Vue通過js控制css變量一鍵修改全局樣式的完整過程

    Vue通過js控制css變量一鍵修改全局樣式的完整過程

    這篇文章主要介紹了Vue通過js控制css變量一鍵修改全局樣式的完整過程,結合ElementUI、vuex和cookie保存用戶設置,確保表格字體隨滾動條變化且新頁面同步生效,提升樣式維護靈活性,需要的朋友可以參考下
    2025-05-05

最新評論

定边县| 武义县| 新野县| 黎平县| 桦川县| 潜江市| 井研县| 潮安县| 黄平县| 龙江县| 东至县| 勃利县| 天柱县| 左贡县| 十堰市| 石河子市| 张家口市| 东乡| 邛崃市| 垣曲县| 许昌市| 岑巩县| 和平区| 澄城县| 湖北省| 将乐县| 双峰县| 筠连县| 云浮市| 瑞昌市| 漾濞| 安龙县| 保定市| 都匀市| 鄢陵县| 阿城市| 太和县| 日照市| 海盐县| 白河县| 苍南县|