【vue3+ts版】使用Codemirror

本文详细描述了如何在Vue3应用中使用Codemirror构建一个类似数据库查询的控制台组件,包括环境配置、安装步骤、全局注册以及组件的使用和效果展示。
摘要由CSDN通过智能技术生成

背景

        需要一个控制台,类似数据库查询窗口的组件,网上对比了codemiroor和tiptap,最后因为前者有行数选择了它。

Codemirror使用流程

1. 环境

  • vue :3.4.21
  • typescripty:5.4.2

2. 安装

// pnpm 
pnpm add codemirror-editor-vue3 codemirror@^5.65.12

// npm 
npm install codemirror-editor-vue3 codemirror@^5.65.12

// ts版 还需安装:
npm install @types/codemirror

// pnpm 
pnpm add @types/codemirror

3. 全局注册

// main.ts ---我这里是ts文件,大家注意!

import { createApp } from 'vue'

import App from './App.vue'

// 导入codemirror
import { InstallCodemirro } from "codemirror-editor-vue3"

const app = createApp(App)

app.use(InstallCodemirro)

app.mount('#app')

4. 组件使用

<template>
  <Codemirror
    v-model:value="code"
    :options="cmOptions"
    border
    ref="cmRef"
    height="400"
    width="600"
    @change="onChange"
    @input="onInput"
    @ready="onReady"
  >
  </Codemirror>
</template>
<script lang="ts" setup>
  import { ref, onMounted, onUnmounted } from "vue"
  import "codemirror/mode/javascript/javascript.js"
  import Codemirror from "codemirror-editor-vue3"
  import type { CmComponentRef } from "codemirror-editor-vue3"
  import type { Editor, EditorConfiguration } from "codemirror"
 
  const code = ref(
    `const i = 0;
        for (; i < 9; i++) {
        console.log(i);
        // more statements
        }
    `
  )
  const cmRef = ref<CmComponentRef>()
  const cmOptions: EditorConfiguration = {
    mode: "text/javascript"
  }
 
  const onChange = (val: string, cm: Editor) => {
    console.log(val)
    console.log(cm.getValue())
  }
 
  const onInput = (val: string) => {
    console.log(val)
  }
 
  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>

5. 效果展示

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DefinitelyTyped 包含大量的高质量的 TypeScript 类型定义。 包括: Ace Cloud9 Editor (by Diullei Gomes) AmCharts (by Covobonomo) AngularJS (by Diego Vilar) (wiki) Arbiter (by Arash Shakery) async (by Boris Yankov) Backbone.js (by Boris Yankov) Backbone Relational (by Eirik Hoem) Bootbox (by Vincent Bortone) Bootstrap (by Boris Yankov) bootstrap-notify (by Blake Niemyjski) bootstrap.datepicker (by Boris Yankov) Box2DWeb (by Josh Baldwin) Breeze (by Boris Yankov) CasperJS (by Jed Hunsaker) Cheerio (by Bret Little) Chosen (by Boris Yankov) Chrome (by Matthew Kimber) CodeMirror (by François de Campredon) Commander (by Marcelo Dezem) d3.js (from TypeScript samples) domo (by Steve Fenton) dust (by Marcelo Dezem) EaselJS (by Pedro Ferreira) ember.js (by Boris Yankov) EpicEditor (by Boris Yankov) expect.js (by Teppei Sato) Express (by Boris Yankov) Ext JS (by Brian Kotek) Fabric.js (by Oliver Klemencic) Fancybox (by Boris Yankov) File API: Directories and System (by Kon) File API: Writer (by Kon) Finite State Machine (by Boris Yankov) Firebase (by Vincent Bortone) FlexSlider (by Diullei Gomes) Foundation (by Boris Yankov) FPSMeter (by Aaron Lampros) FullCalendar (by Neil Stalker) Gamepad (by Kon) glDatePicker (by Dániel Tar) GreenSock Animation Platform (GSAP) (by Robert S.) Grunt JS (by Basarat Ali Syed) Google API Client (by Frank M) Google App Engine Channel API (by vvakame) GoogleMaps (by Esben Nepper) Google Geolocation (by Vincent Bortone) Google Page Speed Online API (by Frank M) Google Translate API (by Frank M) Google Url Shortener (by Frank M) Hammer.js (by Boris Yankov) Handlebars (by Boris Yankov) Highcharts (by damianog) History.js (by Boris Yankov) Humane.js (by John Vrbanac) i18next (by Maarten Docter) iCheck (by Dániel Tar) Impress.js (by Boris Yankov) iScroll (by Boris Yankov) jake (by Kon) Jasmine (by Boris Yankov) jQRangeSlider (by Dániel Tar) jQuery (from TypeScript samples) jQuery Mobile (by Boris Yankov) jQuery UI (by Boris Yankov) jQuery.autosize (by Jack Moore) jQuery.BBQ (by Adam R. Smith) jQuery.contextMenu (by Natan Vivo) jQuery.clientSideLogging (by Diullei Gomes) jQuery.Colorbox (by Gidon Junge) jQuery.Cookie (by Roy Goode) jQuery.Cycle (by François Guillot) jQuery.dataTables (by Armin Sander) jQuery.dynatree (by François de Campredon) jQuery.Flot (by Matt Burland) jQuery.form (by François Guillot) jQuery.Globalize (by Boris Yankov) jQuery.jNotify (by James Curran) jQuery.noty (by Aaron King) jQuery.pickadate (by Theodore Brown) jQuery.scrollTo (by Neil Stalker) jQuery.simplePagination (by Natan Vivo) jQuery.timeago (by François Guillot) jQuery.Timepicker (by Anwar Javed) jQuery.TinyCarousel (by Christiaan Rakowski) jQuery.TinyScrollbar (by Christiaan Rakowski) jQuery.Transit (by MrBigDog2U) jQuery.Validation (by Boris Yankov) jQuery.Watermark (by Anwar Javed) jScrollPane (by Dániel Tar) JSDeferred (by Daisuke Mino) JSONEditorOnline (by Vincent Bortone) jStorage (by Danil Flores) JWPlayer (by Martin Duparc) KeyboardJS (by Vincent Bortone) Knockback (by Marcel Binot) Knockout.js (by Boris Yankov) Knockout.Mapping (by Boris Yankov) Knockout.Postbox (by Judah Gabriel) Knockout.Validation (by Dan Ludwig) Knockout.Viewmodel (by Oisin Grehan) ko.editables (by Oisin Grehan) KoLite (by Boris Yankov) Leaflet (by Vladimir) Libxmljs (by François de Campredon) ladda (by Danil Flores) linq.js (by Marcin Najder) Livestamp.js (by Vincent Bortone) Marked (by William Orr) Modernizr (by Boris Yankov and Theodore Brown) Moment.js (by Michael Lakerveld) Mousetrap (by Dániel Tar) Mustache.js (by Boris Yankov) Node.js (from TypeScript samples) node_redis (by Boris Yankov) node_zeromq (by Dave McKeown) node-sqlserver (by Boris Yankov) Numeral.js (by Vincent Bortone) PhantomJS (by Jed Hunsaker) PhoneGap (by Boris Yankov) Platform (by Jake Hickman) PouchDB (by Bill Sears) PreloadJS (by Pedro Ferreira) QUnit (by Diullei Gomes) Restify (by Bret Little) Rx.js (by gsino) Raphael (by CheCoxshall) Restangular (by Boris Yankov) require.js (by Josh Baldwin) Sammy.js (by Boris Yankov) Select2 (by Boris Yankov) Sencha Touch (by Brian Kotek) SharePoint (by Stanislav Vyshchepan and Andrey Markeev) SignalR (by Boris Yankov) Sinon (by William Sears) socket.io (by William Orr) SockJS (by Emil Ivanov) SoundJS (by Pedro Ferreira) Spin (by Boris Yankov) Store.js (by Vincent Bortone) Sugar (by Josh Baldwin) SwipeView (by Boris Yankov) Tags Manager (by Vincent Bortone) Teechart (by Steema) three.js (by Kon) Toastr (by Boris Yankov) trunk8 (by Blake Niemyjski) TweenJS (by Pedro Ferreira) tween.js (by Adam R. Smith) twitter-bootstrap-wizard (by Blake Niemyjski) Ubuntu Unity Web API (by John Vrbanac) Underscore.js (by Boris Yankov) Underscore.js (Typed) (by Josh Baldwin) Underscore-ko.js (by Maurits Elbers) Viewporter (by Boris Yankov) Vimeo (by Daz Wilkin) WebRTC (by Ken Smith) YouTube (by Daz Wilkin) YouTube Analytics API (by Frank M) YouTube Data API (by Frank M) Zepto.js (by Josh Baldwin) Zynga Scroller (by Boris Yankov) ZeroClipboard (by Eric J. Smith)
要在 Vue 3 项目中使用 CodeMirror,可以使用 Vite 作为构建工具,并按照以下步骤安装: 1. 安装 CodeMirror 和 @codemirror/vue3 包: ``` npm install codemirror @codemirror/vue3 ``` 2. 在 Vue 3 项目的 `main.js` 文件中引入 CodeMirror 样式和 `@codemirror/vue3`: ```js import 'codemirror/lib/codemirror.css' import '@codemirror/theme-seti/theme-seti.css' import { createApp } from 'vue' import App from './App.vue' import { codemirror } from '@codemirror/vue3' import { defaultTabBinding } from '@codemirror/commands' import { keymap } from '@codemirror/view' import { javascript } from '@codemirror/lang-javascript' const app = createApp(App) app.use(codemirror({ theme: 'seti', lineNumbers: true, tabSize: 2, extensions: [keymap.of([defaultTabBinding]), javascript()] })) app.mount('#app') ``` 在这里,我们选择了 Seti 主题,并启用了行号和 2 个空格的缩进。我们还添加了 `@codemirror/commands` 和 `@codemirror/view` 包中的默认 Tab 绑定,以及 `@codemirror/lang-javascript` 包中的 JavaScript 语言扩展。 3. 在 Vue 3 项目中使用 `<codemirror>` 组件: ```vue <template> <div> <codemirror v-model="code" :options="{ mode: 'javascript', theme: 'seti', lineNumbers: true, tabSize: 2 }" /> </div> </template> <script> export default { data() { return { code: 'const message = "Hello, world!";\nconsole.log(message);' } } } </script> ``` 在这里,我们将 CodeMirror 组件的值绑定到 `code` 数据属性,并设置了选项,包括 JavaScript 模式、Seti 主题、行号和 2 个空格的缩进。 这样就可以在 Vue 3 项目中使用 CodeMirror 了!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值