在vue中使用自定义元素
Web Components 是一组 web 原生 API 的统称,允许开发者创建可复用的自定义元素 (custom elements)。
创建自定义元素 defineCustomElement
Vue 提供了一个和定义一般 Vue 组件几乎完全一致的 defineCustomElement
方法来支持创建自定义元素。这个方法接收的参数和 defineComponent
完全相同。但它会返回一个继承自 HTMLElement
的自定义元素构造器:
<script setup>
import { defineCustomElement } from "vue";
// 定义一个自定义元素
const myElement = defineCustomElement({
template: `<div>Hello World</div>`,
props: {},
});
// 注册自定义元素
customElements.define("hello-world", myElement);
</script>
<template>
<hello-world></hello-world>
</template>
提示
默认情况下,Vue 会将任何非原生的 HTML 标签优先当作 Vue 组件处理,而将“渲染一个自定义元素”作为后备选项。要让 Vue 知晓特定元素应该被视为自定义元素并跳过组件解析
Vite 配置
// vite.config.js
import vue from '@vitejs/plugin-vue'
export default {
plugins: [
vue({
template: {
compilerOptions: {
// 将所有带短横线的标签名都视为自定义元素
isCustomElement: (tag) => tag.includes('-')
}
}
})
]
}
在vue这个构建中不支持运行时编译 需要配置你的 bundler
别名 vue:vue/dist/vue.esm-bundler.js
// vite.config.js
import vue from '@vitejs/plugin-vue'
export default {
plugins: [
vue({
template: {
compilerOptions: {
// 将所有带短横线的标签名都视为自定义元素
isCustomElement: (tag) => tag.includes('-')
}
}
})
],
resolve: {
alias: {
vue: 'vue/dist/vue.esm-bundler.js'
}
}
}