【发布时间】:2021-08-26 11:20:00
【问题描述】:
我目前正在使用 Vue3 测试 Web 组件,并且想知道这个 Shadow DOM 是如何工作的。一些第三方库正在使用getElementById() 访问元素并抛出错误,因为该元素是null。
显然这是因为 Web 组件无法访问实际的 DOM。这意味着函数甚至无法找到组件本身中使用的 HTML 元素。谁能解释为什么会这样?那么我将如何访问这些元素?也许是shadowRoot?
Test.vue:
<template>
<div id="test">Hello World!</div>
</template>
<script lang="js">
import {
ref,
onMounted
} from "vue";
export default {
setup(props) {
onMounted(() => {
// NULL
console.log(document.getElementById("test"));
});
}
}
</script>
main.js:
import { defineCustomElement } from 'vue'
import Test from './Test.vue'
const ExampleElement = defineCustomElement(Test)
// register
window.customElements.define('test-component', ExampleElement)
【问题讨论】:
-
它在我的电脑上正确运行,得到了
#test元素 -
应该可以,我在 codesandbox 中测试过
-
显示 main.js 文件
-
@Radeanu 我再次对此进行了测试。该元素仍然为空。你知道获取元素的方法吗?也许用 shadowRoot?
标签: javascript vue.js web-component vuejs3