vue3 codemirror代码编辑器

1 安装

pnpm i codemirror-editor-vue3 codemirror@^5 -S

2 TS支持

pnpm i @types/codemirror -D  

3.示例(按TAB补全代码)

<template>
  <Codemirror v-model:value="code" :options="cmOptions" border ref="cmRef" height="400" width="600"
          @change="onChange" @input="onInput" @ready="onReady">
        </Codemirror>
</template>

<script  setup>
import "codemirror/mode/sql/sql.js";
import Codemirror from "codemirror-editor-vue3";
import type { CmComponentRef } from "codemirror-editor-vue3";
import type { Editor, EditorConfiguration } from "codemirror";
// 引入代码自动提示插件
import 'codemirror/addon/hint/show-hint.css';
import 'codemirror/addon/hint/sql-hint';
import 'codemirror/addon/hint/show-hint';


const code = ref(
  ``
);
const cmRef = ref<CmComponentRef>();
const cmOptions: EditorConfiguration = {
  mode: "sql",
  extraKeys: { // 触发按键
    'Ctrl': 'autocomplete'
  },
  hintOptions: { // 自定义提示选项
    completeSingle: false, // 当匹配只有一项的时候是否自动补全
    tables: {
      users: ['name', 'score', 'birthDate'],
      countries: ['name', 'population', 'size'],
      score: ['zooao'],
    }
  }

};

const onChange = (val: string, cm: Editor) => {
  console.log(cm.getValue());
};

const onInput = (val: string) => {
  cmRef.value?.cminstance.showHint();
};

const onReady = (cm: Editor) => {
  console.log(cm.focus());
};

onMounted(() => {
  setTimeout(() => {
    cmRef.value?.refresh();
  }, 1000);

  setTimeout(() => {
    cmRef.value?.resize(300, 200);
  }, 2000);

  setTimeout(() => {
    cmRef.value?.cminstance.isClean();
  }, 3000);
});

onUnmounted(() => {
  cmRef.value?.destroy();
});


</script>

### 安装与配置 为了在 Vue 2 中集成 `vue-codemirror` 代码编辑器,需先通过 npm 或 yarn 来安装必要的依赖包。对于基于 Vue 2 的项目,在项目的根目录执行如下命令可以完成组件及其依赖项的安装[^1]。 ```bash npm install vue-codemirror @codemirror/view @codemirror/state @codemirror/basic-setup ``` ### 配置 Vue-Codemirror 接下来是在 Vue 应用程序中引入并注册该组件的方式: #### 主要步骤概述 创建一个新的文件用于封装 CodeMirror 组件以便于在整个应用中使用它。下面是一个简单的例子展示如何实现这一点。 #### 创建自定义组件 新建一个名为 `CodeEditor.vue` 文件,并按照以下方式编写其内容: ```html <template> <div ref="editor"></div> </template> <script> import { ref, onMounted } from 'vue'; // 导入基本设置和其他所需模块 import { EditorState } from '@codemirror/state' import { EditorView, basicSetup } from '@codemirror/basic-setup' export default { name: "CodeEditor", props: ['value'], setup(props) { let editor = ref(null); onMounted(() => { const state = EditorState.create({ doc: props.value, extensions: [basicSetup], }); new EditorView({ state, parent: editor.value }); }) return { editor }; } } </script> ``` 此部分展示了如何利用 Composition API 构建一个简易版本的代码编辑器组件[^3]。 请注意上述示例适用于 Vue 3;由于 Vue 2 不支持 `<script setup>` 和组合式API (Composition API),因此如果要在 Vue 2 上实施,则需要调整为选项式 API 并手动管理生命周期钩子函数。 针对 Vue 2 特有的情况,以下是修改后的解决方案: ```javascript Vue.component('code-editor', { template: '<textarea ref="editor"></textarea>', mounted() { this.editor = new window.CodeMirror.fromTextArea(this.$refs.editor, { lineNumbers: true, mode: "text/javascript" }); // 将初始值传递给编辑器实例 this.editor.setValue(this.value); }, watch: { value(newValue) { if (this.editor.getValue() !== newValue) { this.editor.setValue(newValue); } } }, methods: { getValue() { return this.editor.getValue(); } }, destroyed() { this.editor.toTextArea(); // 清理工作 }, props: ["value"] }); ``` 这段脚本说明了怎样适配 Vue 2 的语法结构以及如何处理双向绑定等问题。 最后一步就是在目标页面或父级组件里声明这个新组建,并像这样传参进去: ```html <template> <!-- ... --> <code-editor v-model="yourDataModel"/> <!-- ... --> </template> ``` 以上就是关于如何在 Vue 2 中安装配置 `vue-codemirror` 编辑器的方法介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值