前置知识: Vue 3

Vue3与Web Components

1 minIntermediate2026/6/14

Vue组件与Web Components互操作

1. 定义 Vue Web Component

import { defineCustomElement } from 'vue';

const MyVueElement = defineCustomElement({
  props: { message: String },
  template: '<span>{{ message }}</span>',
  styles: [
    `
    span { color: red; }
  `,
  ],
});

customElements.define('my-vue-element', MyVueElement);

2. 事件

const MyElement = defineCustomElement({
  emits: ['change'],
  template: `
    <button @click="$emit('change', value)">
      Click
    </button>
  `,
});

3. 在 Vue 中使用 Web Components

// vite.config.js
export default {
  compilerOptions: {
    isCustomElement: (tag) => tag.startsWith('my-'),
  },
};
<template>
  <my-custom-element :data="myData" @change="onChange"></my-custom-element>
</template>

4. Shadow DOM 与样式

// Vue Web Components 使用 Shadow DOM
// 样式隔离,不受外部 CSS 影响
// 可以使用 CSS 自定义属性穿透