You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue3 Composition API中获取Web Components的shadowRoot引用

如何使用Vue3 Composition API获取Web Components的shadowRoot引用

使用Options API时可以通过如下代码实现:

<script>
export default {
  mounted() {
    const shadowRoot = this.$el.parentNode
  }
}
</script>

最初尝试用getCurrentInstance()获取没有成功,下面是经过验证的可行实现方案:


可行实现方案

Web Component(WC)代码:

<script setup lang="ts">
import { useWindi } from '../use/useWindi'
defineProps<{ title: string }>()
useWindi()
</script>

自定义hook代码:

import { ref, onUpdated, onMounted, getCurrentInstance } from 'vue'

export const useWindi = () => {
  const shadowRoot = ref<ShadowRoot>()

  onUpdated(() => {
    if(!shadowRoot.value) return
    shadowRoot.value.adoptedStyleSheets = [(window as any).windiSheet];
  })

  onMounted(() => {
    shadowRoot.value = getCurrentInstance()?.vnode?.el?.parentNode
    if(!shadowRoot.value) return
    shadowRoot.value.adoptedStyleSheets = [(window as any).windiSheet];
  })
}

该实现的核心需求是在自定义组件中引入windicss样式表,通过将全局的windi样式表挂载到shadowRoot的adoptedStyleSheets属性,实现Windi CSS在Shadow DOM中的样式生效。


内容的提问来源于stack exchange,提问作者wiwolavida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:57:02