Web Component
同一组件也以原生自定义元素的形式提供,它使用 Vue 的 defineCustomElement 包装(仅支持 Vue 3)。关于 Vue 自定义元素的行为,请参阅 Vue 文档中的 Vue 与 Web Components。
共有两个入口:
自动注册
导入 vue-codemirror6/wc-auto 即可注册 <code-mirror>:
使用自定义标签名注册
导入 vue-codemirror6/wc,并将想要的标签名传给 register():
也可以使用默认导出自行注册:
同一个构造函数在一个自定义元素注册表中只能定义一次。请只注册一个标签名,并且不要在同一页面中同时使用 vue-codemirror6/wc 和 vue-codemirror6/wc-auto;注册第二个标签名会抛出 NotSupportedError。
vue-codemirror6/wc 不会向 HTMLElementTagNameMap 添加任何内容,请自行声明标签的类型:
通过 CDN(jsDelivr)使用
两个入口都可以通过 import map 从 jsDelivr 加载 ESM 文件,无需打包工具即可使用(需要 1.8.0 或更高版本):
如果加载了两份 @codemirror/state(或其他 @codemirror/* 包),CodeMirror 将无法工作;如果加载了两份 Vue,元素将无法工作。请像上面的示例那样把每个包映射到唯一的 URL,并且不要使用 jsDelivr 的 /+esm URL:它会为每个包分别固定依赖版本,容易导致重复加载。
- 最后两项用于
@codemirror/lang-javascript。请以同样的方式添加你使用的语言包及其@lezer/*解析器包。 - 如需使用自定义标签名,请改为映射
"vue-codemirror6/wc": "https://cdn.jsdelivr.net/npm/vue-codemirror6@1/dist/wc.es.js"并调用register()。 *.umd.js构建(vue-codemirror6/umd、vue-codemirror6/wc/umd、vue-codemirror6/wc-auto/umd)用于 CommonJS / AMD 加载器,无法通过普通的<script>标签加载。
补充说明
- 在 Vue 模板中使用时,请通过
compilerOptions.isCustomElement(例如tag => tag === 'code-mirror')将其标记为自定义元素。 - 编辑器渲染在一个 open 模式的 Shadow Root 中。
- 以下示例使用
<code-mirror>;使用vue-codemirror6/wc时,请替换为你注册的标签名。
设置 props
- 基本类型的 props(
string、boolean、number)可以通过属性(attribute)或 DOM 属性(property)设置。 - 对象、数组和函数类型的 props(
lang、linter、extensions、theme、keymap等)只能通过 DOM 属性设置。
在元素插入文档之前设置属性,即可在首次渲染时生效:
事件
Vue 的 emit 会以原生 CustomEvent 的形式派发,emit 的参数以数组形式放在 event.detail 中。
实例 API
实例 API 直接暴露在元素上: