在vue里用codemirror实现代码编辑器功能?

简介: 在vue里用codemirror实现代码编辑器功能?

安装codemirror


版本:"codemirror": "^5.53.2"

npm install codemirror --save


https://codemirror.net/



编写codemirror.vue公共组件


<template>
  <div class="code-mirror-box">
    <textarea ref="textareaCoder"></textarea>
  </div>
</template>
<script>
// 引入全局实例
import _CodeMirror from 'codemirror'
// language
import 'codemirror/mode/javascript/javascript.js'
// 核心样式
import 'codemirror/lib/codemirror.css'
// 引入主题后还需要在 options 中指定主题才会生效
import 'codemirror/theme/monokai.css'
// active-line
import 'codemirror/addon/selection/active-line.js'
// foldGutter
import 'codemirror/addon/fold/foldgutter.css'
import 'codemirror/addon/fold/brace-fold.js'
import 'codemirror/addon/fold/comment-fold.js'
import 'codemirror/addon/fold/foldcode.js'
import 'codemirror/addon/fold/foldgutter.js'
import 'codemirror/addon/fold/indent-fold.js'
import 'codemirror/addon/fold/markdown-fold.js'
import 'codemirror/addon/fold/xml-fold.js'
// 尝试获取全局实例
const CodeMirror = window.CodeMirror || _CodeMirror
  export default {
    name: 'code-mirror-box',
    data () {
      return {
        // 内部真实的内容
        code: '',
        // 编辑器实例
        coder: null,
        // 默认配置
        options: {
          mode: 'javascript', // 默认的语法类型
          // 缩进格式
          tabSize: 2,
          // 主题,对应主题库 JS 需要提前引入
          theme: 'monokai',
          // 显示行号
          lineNumbers: true,
          line: true,
          styleActiveLine: true, // 激活行样式
          // 添加折叠
          foldGutter: true,
          gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
        }
      }
    },
    mounted () {
      // 初始化
      this._initialize()
    },
    methods: {
      // 初始化
      _initialize () {
        // 初始化编辑器实例,传入需要被实例化的文本域对象和默认配置
        this.coder = CodeMirror.fromTextArea(this.$refs.textareaCoder, this.options)
        // 监听改变
        this.coder.on('change', (coder) => {
            this.code = coder.getValue()
        })
      },
      // 赋值操作
      setValue(val) {
        this.coder.setValue(val)
      },
      // 刷新操作
      refresh() {
        let timer = setTimeout(()=> {
            clearTimeout(timer)
            this.$nextTick(() => {
                this.coder.refresh()
            })
        }, 100)
      }
    }
  }
</script>
<style lang="scss" scoped>
  .code-mirror-box {
    font-size: 14px;
  }
</style>



使用codemirror.vue公共组件

<template>
    <code-mirror ref="codeMirror"></code-mirror>
</template>
<script>
// 引用刚刚写的codemirror.vue公共组件
import CodeMirror from './codemirror.vue'
export default {
    components: {
      CodeMirror
    },
    methods: {
        // 刷新 (如果出现编辑器样式问题,以及不能初始化赋值回显数据,可以进行刷新操作)
        refresh() {
            this.$refs.codeMirror.refresh()
        },
        // 获取编辑器的值
        getValue() {
            return this.$refs.codeMirror.code
        },
        // 回显赋值
        setValue() {
            this.$refs.codeMirror.setValue('回显的值:比如 function aa() {}')
        }
    }
}
</script>


效果如下

484ed8b8fd7a48e1b5a34ed6a1d23af2.png



目录
相关文章
|
3月前
|
数据安全/隐私保护 Windows
深度剖析:PDF 工具箱功能,编辑器操作及页面 / 图像提取技巧
PDF24 Tools是一款德国开发的免费PDF工具箱,18年始终免费,支持网页与Windows客户端。内置近50个工具,涵盖编辑、转换、合并、提取、加密等功能,操作简单,可离线使用,是高效处理PDF的理想选择。
577 0
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
488 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
JavaScript 开发工具 C++
探索 Visual Studio Code:开发者的多功能编辑器
Visual Studio Code(VS Code)是由微软开发的一款免费、开源的轻量级代码编辑器,支持 Windows、Linux 和 macOS。它内置了对多种编程语言的支持,并提供了代码高亮、智能补全、调试和 Git 集成等功能。VS Code 的强大之处还在于其丰富的插件生态系统,通过安装插件可以进一步扩展功能。此外,用户还可以通过定制设置来自定义编辑器的行为和外观,从而提升开发效率。本文将详细介绍 VS Code 的核心特性、推荐插件及定制化设置方法。
|
8月前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
637 6
|
JavaScript 前端开发 API
|
11月前
|
JavaScript 前端开发
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
166 8
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
432 17
|
资源调度 JavaScript UED
如何使用Vue.js实现单页应用的路由功能
【10月更文挑战第1天】如何使用Vue.js实现单页应用的路由功能
|
存储 JavaScript
任务清单小功能的实现(任务的增、删、改、查、存储)使用Vue实现
这篇文章介绍了使用Vue实现的任务清单小功能,包括任务的增加、删除、修改、查看以及数据存储。文章通过视频演示展示了实现效果,重点讲解了编辑功能的实现,并通过代码实例展示了编辑功能的核心代码,同时提供了完整的代码下载链接以及以往练习的概览。
任务清单小功能的实现(任务的增、删、改、查、存储)使用Vue实现