当前位置:首页 > VUE

vue实现codemirror sql

2026-01-17 06:03:16VUE

实现 Vue 中使用 CodeMirror 编辑 SQL

安装必要的依赖包:

npm install codemirror vue-codemirror

引入 CodeMirror 核心和 SQL 模式:

import Vue from 'vue'
import { codemirror } from 'vue-codemirror'
import 'codemirror/lib/codemirror.css'
import 'codemirror/mode/sql/sql.js'
import 'codemirror/addon/edit/matchbrackets.js'
import 'codemirror/theme/dracula.css'

组件注册与模板

注册组件并在模板中使用:

Vue.component('code-mirror', codemirror)

模板部分代码:

<code-mirror
  v-model="sqlCode"
  :options="cmOptions"
  @ready="onCmReady"
  @input="onCmCodeChange"
/>

配置 CodeMirror 选项

设置 CodeMirror 的配置选项:

data() {
  return {
    sqlCode: 'SELECT * FROM users;',
    cmOptions: {
      tabSize: 2,
      mode: 'text/x-sql',
      theme: 'dracula',
      lineNumbers: true,
      line: true,
      matchBrackets: true,
      indentUnit: 2,
      extraKeys: {'Ctrl-Space': 'autocomplete'}
    }
  }
}

添加自动完成功能

安装 SQL 提示插件:

vue实现codemirror sql

npm install codemirror-addon-hint

配置 SQL 提示:

import 'codemirror/addon/hint/show-hint.css'
import 'codemirror/addon/hint/show-hint.js'
import 'codemirror/addon/hint/sql-hint.js'

更新配置选项:

cmOptions: {
  // ...其他配置
  hintOptions: {
    completeSingle: false,
    tables: {
      users: ['id', 'name', 'email'],
      products: ['id', 'title', 'price']
    }
  }
}

处理编辑器事件

添加编辑器事件处理方法:

methods: {
  onCmReady(cm) {
    console.log('编辑器已加载', cm)
  },
  onCmCodeChange(newCode) {
    console.log('代码变更:', newCode)
    this.sqlCode = newCode
  }
}

自定义 SQL 主题

创建自定义 CSS 覆盖默认样式:

vue实现codemirror sql

.CodeMirror {
  height: auto;
  min-height: 300px;
  font-family: 'Fira Code', monospace;
  font-size: 14px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

.CodeMirror-focused {
  border-color: #409EFF;
}

添加语法校验

安装 lint 插件:

npm install codemirror-lint

配置 SQL 语法校验:

import 'codemirror/addon/lint/lint.css'
import 'codemirror/addon/lint/lint.js'
import 'codemirror/addon/lint/sql-lint.js'

更新配置选项:

cmOptions: {
  // ...其他配置
  lint: true,
  gutters: ['CodeMirror-lint-markers']
}

响应式调整大小

添加窗口大小变化监听:

mounted() {
  window.addEventListener('resize', this.resizeEditor)
},
methods: {
  resizeEditor() {
    if (this.$refs.cmEditor) {
      this.$refs.cmEditor.codemirror.refresh()
    }
  }
}

完整组件示例

<template>
  <div class="sql-editor">
    <code-mirror
      ref="cmEditor"
      v-model="sqlCode"
      :options="cmOptions"
      @ready="onCmReady"
      @input="onCmCodeChange"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      sqlCode: '',
      cmOptions: {
        // ...完整配置
      }
    }
  },
  // ...方法和其他选项
}
</script>

标签: vuecodemirror
分享给朋友:

相关文章

vue实现预约页面

vue实现预约页面

Vue 预约页面实现步骤 准备工作 安装Vue CLI创建项目,确保已配置好开发环境。使用vue create appointment-page初始化项目,选择默认配置或手动配置。 页面结构设计…

vue实现共享屏幕

vue实现共享屏幕

共享屏幕的基本实现 在Vue中实现共享屏幕功能通常需要结合浏览器的getDisplayMedia API。以下是一个基础实现示例: <template> <div>…

项目基于vue实现

项目基于vue实现

基于Vue实现项目的关键方法 搭建基础环境 安装Node.js和npm/yarn,确保开发环境具备运行Vue的能力。通过Vue CLI快速初始化项目结构,选择所需配置(如Babel、Router、Vu…

vue实现前端注册

vue实现前端注册

Vue 实现前端注册功能 注册表单设计 使用 Vue 的模板语法创建注册表单,包含用户名、邮箱、密码和确认密码字段。表单需绑定 v-model 实现双向数据绑定。 <template>…

vue实现选择本地文件

vue实现选择本地文件

实现文件选择功能 在Vue中实现本地文件选择可以通过HTML原生的<input type="file">元素实现。创建一个基本的文件选择组件: <template> &…

vue按钮实现截屏

vue按钮实现截屏

Vue 按钮实现截屏的方法 在 Vue 项目中实现截屏功能可以通过多种方式完成,以下是几种常见的方法: 使用 html2canvas 库 安装 html2canvas 库: npm ins…