vue3代码编辑器组件codemirror-editor-vue3

部署运行你感兴趣的模型镜像

官方文档:https://github.com/RennCheung/codemirror-editor-vue3
国内镜像:https://renncheung.github.io/codemirror-editor-vue3/zh-CN/guide/getting-started

1.安装

npm install codemirror-editor-vue3 codemirror@5.x -S

2.代码示例

<template>
  <Codemirror
    v-model:value="code"
    :options="cmOptions"
    border
    ref="cmRef"
    height="400"
    width="600"
    @change="onChange"
    @input="onInput"
    @ready="onReady"
  >
  </Codemirror>
</template>
<script>
  import { ref, onMounted, onUnmounted } from "vue"
  import "codemirror/mode/javascript/javascript.js"
  import Codemirror from "codemirror-editor-vue3"
  export default {
    components: { Codemirror },
    setup() {
      const code = ref(
        `var i = 0;
for (; i < 9; i++) {
    console.log(i);
    // more statements
}
`
      )

      const cmRef = ref()
      const cmOptions = {
        mode: "text/javascript"
      }
      const onChange = (val, cm) => {
        console.log(val)
        console.log(cm.getValue())
      }

      const onInput = (val) => {
        console.log(val)
      }

      const onReady = (cm) => {
        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()
      })

      return {
        code,
        cmRef,
        cmOptions,
        onChange,
        onInput,
        onReady
      }
    }
  }
</script>

3.支持多种语言

参考文档:https://codemirror.net/5/mode/index.html

  1. 点击参考文档,选择语言并点击在文章最后找到mode的格式
  2. 在配置项中修改mode,并引入对应语言js
    如使用python
    在参考文档中找到 MIME types defined: text/x-python and text/x-cython.
    引入并使用python语言,一定要引入对应js才能使用
import "codemirror/mode/python/python.js"
const cmOptions = {
  mode: "text/x-python", // Use the Python mode
}

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们正在将codemirror-editor-vue3封装成一个可复用的Vue 3组件。以下是步骤和代码示例。 ### 步骤 1. **创建组件文件**:新建一个Vue单文件组件(如`CodeMirrorEditor.vue`)。 2. **安装依赖**:确保已安装`codemirror-editor-vue3`和其依赖。 3. **导入组件**:在单文件组件中导入`Codemirror`组件。 4. **定义props**:定义组件的props,以便父组件传递配置和内容。 5. **设置事件**:暴露必要的事件(如更新内容)。 6. **添加样式**:引入CodeMirror的样式文件。 ### 代码示例 ```vue <template> <codemirror v-model="code" :style="style" :autofocus="autofocus" :placeholder="placeholder" :indent-with-tab="indentWithTab" :tab-size="tabSize" :extensions="extensions" @ready="handleReady" @change="handleChange" @focus="handleFocus" @blur="handleBlur" /> </template> <script> import { Codemirror } from &#39;codemirror-editor-vue3&#39;; import { oneDark } from &#39;@codemirror/theme-one-dark&#39;; import { javascript } from &#39;@codemirror/lang-javascript&#39;; export default { name: &#39;CodeMirrorEditor&#39;, components: { Codemirror }, props: { modelValue: { type: String, default: &#39;&#39;, }, height: { type: String, default: &#39;auto&#39;, }, autofocus: { type: Boolean, default: false, }, placeholder: { type: String, default: &#39;&#39;, }, indentWithTab: { type: Boolean, default: true, }, tabSize: { type: Number, default: 2, }, extensions: { type: Array, default: () => [javascript(), oneDark], }, }, emits: [ &#39;update:modelValue&#39;, &#39;ready&#39;, &#39;change&#39;, &#39;focus&#39;, &#39;blur&#39;, ], computed: { style() { return { height: this.height, overflow: &#39;auto&#39;, }; }, code: { get() { return this.modelValue; }, set(value) { this.$emit(&#39;update:modelValue&#39;, value); }, }, }, methods: { handleReady(payload) { this.$emit(&#39;ready&#39;, payload); }, handleChange(value) { this.$emit(&#39;change&#39;, value); }, handleFocus(event) { this.$emit(&#39;focus&#39;, event); }, handleBlur(event) { this.$emit(&#39;blur&#39;, event); }, }, }; </script> ``` ### 使用说明 在父组件中引入并传递必要的props: ```vue <template> <CodeMirrorEditor v-model="code" :height="&#39;300px&#39;" /> </template> <script> import CodeMirrorEditor from &#39;./CodeMirrorEditor.vue&#39;; export default { components: { CodeMirrorEditor }, data() { return { code: &#39;console.log("Hello, World!");&#39;, }; }, }; </script> ``` ### 关键点 - **双向绑定**:使用`v-model`绑定代码内容。 - **自定义样式**:通过`height`属性控制编辑器高度。 - **扩展性**:通过`extensions`传递CodeMirror扩展(如语言支持、主题等)。 - **事件处理**:暴露了`ready`、`change`、`focus`、`blur`等事件。 ### 注意事项 - 确保安装所需依赖:`codemirror-editor-vue3`、`@codemirror/lang-javascript`、`@codemirror/theme-one-dark`等。 - 可根据需要添加更多配置选项或扩展。 §§相关问题§§ 1. 如何在CodeMirror组件中支持多种编程语言? 2. 如何为CodeMirror组件添加自定义主题? 3. 如何优化CodeMirror组件在大型项目中的性能?</think>下面我将详细介绍如何将 `codemirror-editor-vue3` 封装成可复用的 Vue 3 组件,包括完整实现和最佳实践。 ### 封装步骤与代码实现 #### 1. 创建基础组件文件 创建 `CodeMirrorEditor.vue` 文件: ```vue <template> <div class="code-editor"> <codemirror v-model="codeValue" :style="editorStyle" :placeholder="placeholder" :autofocus="autofocus" :indent-with-tab="indentWithTab" :tab-size="tabSize" :extensions="extensions" @ready="handleReady" @update="handleUpdate" /> </div> </template> <script> import { Codemirror } from &#39;codemirror-editor-vue3&#39; import { defineComponent, computed, ref, toRefs } from &#39;vue&#39; export default defineComponent({ name: &#39;CodeMirrorEditor&#39;, components: { Codemirror }, props: { modelValue: { type: String, default: &#39;&#39; }, height: { type: String, default: &#39;300px&#39; }, language: { type: String, default: &#39;javascript&#39; }, theme: { type: String, default: &#39;light&#39; }, placeholder: String, autofocus: Boolean, indentWithTab: { type: Boolean, default: true }, tabSize: { type: Number, default: 2 } }, emits: [&#39;update:modelValue&#39;, &#39;ready&#39;, &#39;change&#39;], setup(props, { emit }) { const { modelValue, height,
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值