自定义元素 API
defineCustomElement()
此方法接受的参数与 defineComponent
相同,但返回一个原生自定义元素类构造函数。
类型
tsfunction defineCustomElement( component: | (ComponentOptions & CustomElementsOptions) | ComponentOptions['setup'], options?: CustomElementsOptions ): { new (props?: object): HTMLElement } interface CustomElementsOptions { styles?: string[] // 以下选项在 3.5+ 版本中支持 configureApp?: (app: App) => void shadowRoot?: boolean nonce?: string }
类型为简化版,便于阅读。
详情
除了常规的组件选项,
defineCustomElement()
还支持一系列特定于自定义元素的选项:styles
:一个内联 CSS 字符串数组,用于提供应注入元素 shadow root 的 CSS。configureApp
:一个函数,可用于配置自定义元素的 Vue 应用实例。shadowRoot
:boolean
,默认为true
。设置为false
以在不带 shadow root 的情况下渲染自定义元素。这意味着自定义元素单文件组件中的<style>
将不再被封装隔离。nonce
:string
,如果提供,将在注入到 shadow root 样式标签上设置nonce
attribute。
注意,这些选项也可以不作为组件本身的一部分传递,而是通过第二个参数传递:
jsimport Element from './MyElement.ce.vue' defineCustomElement(Element, { configureApp(app) { // ... } })
返回值是一个自定义元素构造函数,可以使用
customElements.define()
注册。示例
jsimport { defineCustomElement } from 'vue' const MyVueElement = defineCustomElement({ /* 组件选项 */ }) // 注册自定义元素 customElements.define('my-vue-element', MyVueElement)
参考
请注意,使用单文件组件时,
defineCustomElement()
需要进行特殊配置。
useHost()
一个组合式 API 辅助函数,返回当前 Vue 自定义元素的宿主元素。
useShadowRoot()
一个组合式 API 辅助函数,返回当前 Vue 自定义元素的 shadow root。
this.$host
一个选项式 API 的 property,暴露当前 Vue 自定义元素的宿主元素。