在Vue3项目中集成CodeMirror创建SQL编辑器的方法详解

 更新时间:2025年04月04日 09:09:00   作者:婷婷婷婷  
在这篇文章中,我们将学习如何在 Vue 3 项目中集成 CodeMirror,以创建一个支持 SQL 语法高亮和自动补全的代码编辑器,需要的朋友可以参考下

什么是 CodeMirror?

CodeMirror 是一个功能强大的浏览器内代码编辑器,支持多种编程语言的语法高亮和代码补全。​

项目设置

首先,确保您的 Vue 3 项目已创建。然后,安装 codemirror-editor-vue3 组件和必要的 CodeMirror 依赖:​

npm install codemirror-editor-vue3 codemirror@^5

如果您的项目需要 TypeScript 支持,还需安装 @types/codemirror:​GitHub

npm install @types/codemirror -D

编写组件

在 Vue 3 组件中,使用 <Codemirror> 标签引入 CodeMirror 编辑器,并配置相关属性:​

<template>
  <Codemirror
    v-model:value="code"
    :options="cmOptions"
    :width="width"
    :height="height"
    :readonly="readonly"
    @ready="onReady"
    @blur="onInput"
  />
</template>

<script setup>
import { ref, computed, nextTick } from "vue";
import Codemirror from "codemirror-editor-vue3";

// 引入必要的 CSS 文件
import "codemirror/lib/codemirror.css";
import "codemirror/theme/idea.css";
import "codemirror/mode/sql/sql.js";
import "codemirror/addon/hint/show-hint.css";
import "codemirror/addon/hint/show-hint";
import "codemirror/addon/hint/sql-hint";
import "codemirror/addon/display/placeholder.js";

// 定义 props
const props = defineProps({
  readonly: {
    type: Boolean,
    default: false,
  },
  width: {
    type: String,
    default: "100%",
  },
  height: {
    type: String,
    default: "300px",
  },
  placeholder: {
    type: String,
    default: "SELECT * FROM log_table WHERE id > ${id}",
  },
});

// 定义响应式变量
const code = ref("");

// 配置 CodeMirror 选项
const cmOptions = computed(() => ({
  mode: "text/x-sql",
  theme: "idea",
  lineNumbers: true,
  lineWrapping: true,
  tabSize: 4,
  readOnly: props.readonly ? "nocursor" : false,
  placeholder: props.placeholder,
  hintOptions: {
    completeSingle: false,
    tables: {
      BPSuv: ["DocEntry", "Subject", "DocStatus", "Remarks"],
      BPSuvA: ["DocEntry", "LineNum", "Question", "QstType"],
      BPSuvB: ["DocEntry", "LineNum", "UserID", "UserName"],
    },
  },
}));

const emit = defineEmits();

// 处理输入事件
const onInput = () => {
  emit("changeTextarea", code.value);
};

// 初始化编辑器
const onReady = (editor) => {
  editor.on("inputRead", (cm, event) => {
    if (/[a-zA-Z]/.test(event.text[0])) {
      cm.showHint();
    }
  });
  nextTick(() => {
    editor.refresh();
  });
};
</script>

<style>
.CodeMirror-hints {
  z-index: 9999 !important;
  position: absolute !important;
}
</style>

代码解析

  • 引入组件和样式:​导入 codemirror-editor-vue3 组件以及 CodeMirror 的核心和附加功能的 CSS 和 JS 文件。​
  • 定义属性(props) :​设置组件的只读状态、宽度、高度和占位符。​
  • 响应式变量:​使用 ref 创建响应式的 code 变量,用于绑定编辑器的内容。​
  • 配置选项:​通过 computed 创建 cmOptions,配置编辑器的模式、主题、行号、自动补全等功能。​
  • 事件处理:​定义 onInput 方法,在编辑器失去焦点时触发 changeTextarea 事件,传递当前代码内容。​
  • 初始化编辑器:​在 onReady 方法中,监听 inputRead 事件,当用户输入字母时,显示自动补全提示。​

使用案例

假设我们有一个日志查询系统,需要用户输入 SQL 查询语句。通过上述组件,我们可以在 Vue 3 项目中轻松实现一个功能完善的 SQL 编辑器,提供语法高亮、自动补全等功能,提升用户体验。​

例如,用户在编辑器中输入 SELECT * FROM 后,会自动提示可用的表名,如 BPSuvBPSuvA 等;继续输入表名后,输入 WHERE ,会提示该表的字段名,如 DocEntrySubject 等,帮助用户快速编写查询语句。​

注意事项

  • 主题设置:​确保引入的主题与 cmOptions 中的 theme 一致。​
  • 自动补全:​hintOptions 中的 tables 配置了 SQL 补全的表和字段信息,可根据实际需求调整。​
  • 样式调整:​通过修改 .CodeMirror-hintsz-index,确保自动补全提示不被其他元素遮挡。​

通过上述步骤,您可以在 Vue 3 项目中成功集成 CodeMirror,实现一个功能完善的 SQL 编辑器,提升用户体验和开发效率

到此这篇关于在Vue3项目中集成CodeMirror创建SQL编辑器的方法详解的文章就介绍到这了,更多相关Vue3 CodeMirror创建SQL编辑器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • elementui中使用el-tree控件懒加载和局部刷新

    elementui中使用el-tree控件懒加载和局部刷新

    这篇文章主要介绍了elementui中使用el-tree控件懒加载和局部刷新,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • vue基于vant实现上拉加载下拉刷新的示例代码

    vue基于vant实现上拉加载下拉刷新的示例代码

    普遍存在于各种app中的上拉加载下拉刷新功能,本文主要介绍了vue基于vant实现上拉加载下拉刷新,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • vue实现标签页切换/制作tab组件详细教程

    vue实现标签页切换/制作tab组件详细教程

    在项目开发中需要使用vue实现tab页签切换功能,所以这里总结下,这篇文章主要给大家介绍了关于vue实现标签页切换/制作tab组件的相关资料,需要的朋友可以参考下
    2023-11-11
  • vue项目index.html中使用环境变量的代码示例

    vue项目index.html中使用环境变量的代码示例

    在Vue3中使用环境变量的方式与Vue2基本相同,下面这篇文章主要给大家介绍了关于vue项目index.html中使用环境变量的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • Vue3发送post请求出现400 Bad Request报错的解决办法

    Vue3发送post请求出现400 Bad Request报错的解决办法

    这篇文章主要给大家介绍了关于Vue3发送post请求出现400 Bad Request报错的解决办法,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • Vue实现通知或详情类弹窗

    Vue实现通知或详情类弹窗

    这篇文章主要为大家详细介绍了Vue实现通知或详情类弹窗,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Vue3+TS实现语音播放组件的示例代码

    Vue3+TS实现语音播放组件的示例代码

    这篇文章主要介绍了如何利用Vue+TS实现一个简易的语音播放组件,文中的示例代码讲解详细,对我们学习Vue有一定的帮助,需要的可以参考一下
    2022-03-03
  • vue中添加语音播报功能的实现

    vue中添加语音播报功能的实现

    本文主要介绍了vue中添加语音播报功能的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • VUE签字组件vue-esign安装使用教程

    VUE签字组件vue-esign安装使用教程

    在我们开发项目中,特别是流程审批类的项目,最后一步会提交审核,审核员看完相应信息以后,没问题就会签字通过审批,这篇文章主要给大家介绍了关于VUE签字组件vue-esign安装使用的相关资料,需要的朋友可以参考下
    2023-09-09
  • vue中watch监听不到变化的解决

    vue中watch监听不到变化的解决

    本文主要介绍了vue中watch监听不到变化的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01

最新评论