Skip to content

커스텀 엘리먼트 API

defineCustomElement()

이 메서드는 defineComponent와 동일한 인자를 받지만, 대신 네이티브 커스텀 엘리먼트 클래스 생성자를 반환합니다.

  • 타입

    ts
    function 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를 제공하기 위한 인라인 CSS 문자열 배열입니다.

    • configureApp : 커스텀 엘리먼트의 Vue 앱 인스턴스를 구성하는 데 사용할 수 있는 함수입니다.

    • shadowRoot : boolean, 기본값은 true입니다. false로 설정하면 커스텀 엘리먼트가 섀도우 루트 없이 렌더링됩니다. 이 경우 커스텀 엘리먼트 SFC 내의 <style>은 더 이상 캡슐화되지 않습니다.

    • nonce : string, 제공되면 섀도우 루트에 주입되는 style 태그의 nonce 속성으로 설정됩니다.

    이러한 옵션들은 컴포넌트 자체의 일부로 전달하는 대신, 두 번째 인자를 통해서도 전달할 수 있습니다:

    js
    import Element from './MyElement.ce.vue'  defineCustomElement(Element, {  configureApp(app) {  // ...  } })

    반환값은 customElements.define()를 사용하여 등록할 수 있는 커스텀 엘리먼트 생성자입니다.

  • 예시

    js
    import { defineCustomElement } from 'vue'  const MyVueElement = defineCustomElement({  /* 컴포넌트 옵션 */ })  // 커스텀 엘리먼트 등록 customElements.define('my-vue-element', MyVueElement)
  • 관련 문서

useHost()

현재 Vue 커스텀 엘리먼트의 호스트 엘리먼트를 반환하는 Composition API 헬퍼입니다.

useShadowRoot()

현재 Vue 커스텀 엘리먼트의 섀도우 루트를 반환하는 Composition API 헬퍼입니다.

this.$host

현재 Vue 커스텀 엘리먼트의 호스트 엘리먼트를 노출하는 Options API 속성입니다.

커스텀 엘리먼트 API has loaded