Vue 基于vue-codemirror实现的代码编辑器 2

简介: Vue 基于vue-codemirror实现的代码编辑器

引用编辑器组件

<template>

   <div class="code-mirror-div">

       <div class="tool-bar">

           <span>请选择主题</span>

           <el-select v-model="cmTheme" placeholder="请选择" size="small" style="width:150px">

               <el-option v-for="item in cmThemeOptions" :key="item" :label="item" :value="item"></el-option>

           </el-select>

           <span style="margin-left: 10px">请选择编辑模式</span>

           <el-select

               v-model="cmEditorMode"

               placeholder="请选择"

               size="small"

               style="width:150px"

               @change="onEditorModeChange"

           >

               <el-option

                   v-for="item in cmEditorModeOptions"

                   :key="item"

                   :label="item"

                   :value="item"

               ></el-option>

           </el-select>

           <el-button type="primary" size="small" style="margin-left:10x" @click="setStyle">修改样式</el-button>

           <el-button type="primary" size="small" style="margin-left:10x" @click="getValue">获取内容</el-button>

           <el-button type="primary" size="small" style="margin-left:10x" @click="setValue">修改内容</el-button>

       </div>

 

       <code-mirror-editor

           ref="cmEditor"

           :cmTheme="cmTheme"

           :cmMode="cmMode"

           :autoFormatJson="autoFormatJson"

           :jsonIndentation="jsonIndentation"

       ></code-mirror-editor>

   </div>

</template>

 

<script>

// 使用时需要根据CodeMirrorEditor.vue的实际存放路径,调整from后面的组件路径,以便正确引用

import CodeMirrorEditor from "@/common/components/public/CodeMirrorEditor";

 

export default {

   components: {

       CodeMirrorEditor

   },

   data() {

       return {

           cmTheme: "default", // codeMirror主题

           // codeMirror主题选项

           cmThemeOptions: [

               "default",

               "3024-day",

               "3024-night",

               "abcdef",

               "ambiance",

               "ayu-dark",

               "ayu-mirage",

               "base16-dark",

               "base16-light",

               "bespin",

               "blackboard",

               "cobalt",

               "colorforth",

               "darcula",

               "dracula",

               "duotone-dark",

               "duotone-light",

               "eclipse",

               "elegant",

               "erlang-dark",

               "gruvbox-dark",

               "hopscotch",

               "icecoder",

               "idea",

               "isotope",

               "lesser-dark",

               "liquibyte",

               "lucario",

               "material",

               "material-darker",

               "material-palenight",

               "material-ocean",

               "mbo",

               "mdn-like",

               "midnight",

               "monokai",

               "moxer",

               "neat",

               "neo",

               "night",

               "nord",

               "oceanic-next",

               "panda-syntax",

               "paraiso-dark",

               "paraiso-light",

               "pastel-on-dark",

               "railscasts",

               "rubyblue",

               "seti",

               "shadowfox",

               "solarized dark",

               "solarized light",

               "the-matrix",

               "tomorrow-night-bright",

               "tomorrow-night-eighties",

               "ttcn",

               "twilight",

               "vibrant-ink",

               "xq-dark",

               "xq-light",

               "yeti",

               "yonce",

               "zenburn"

           ],

           cmEditorMode: "default", // 编辑模式

           // 编辑模式选项

           cmEditorModeOptions: [

               "default",

               "json",

               "sql",

               "javascript",

               "css",

               "xml",

               "html",

               "yaml",

               "markdown",

               "python"

           ],

           cmMode: "application/json", //codeMirror模式

           jsonIndentation: 2, // json编辑模式下,json格式化缩进 支持字符或数字,最大不超过10,默认缩进2个空格

           autoFormatJson: true // json编辑模式下,输入框失去焦点时是否自动格式化,true 开启, false 关闭

       };

   },

   methods: {

       // 切换编辑模式事件处理函数

       onEditorModeChange(value) {

           switch (value) {

               case "json":

                   this.cmMode = "application/json";

                   break;

               case "sql":

                   this.cmMode = "sql";

                   break;

               case "javascript":

                   this.cmMode = "javascript";

                   break;

               case "xml":

                   this.cmMode = "xml";

                   break;

               case "css":

                   this.cmMode = "css";

                   break;

               case "html":

                   this.cmMode = "htmlmixed";

                   break;

               case "yaml":

                   this.cmMode = "yaml";

                   break;

               case "markdown":

                   this.cmMode = "markdown";

                   break;

               case "python":

                   this.cmMode = "python";

                   break;

               default:

                   this.cmMode = "application/json";

           }

       },

       // 修改样式(不推荐,建议参考<style>中的样式,提前配置好样式)

       setStyle() {

           let styleStr =

               "position: absolute; top: 80px; left: 50px; right: 200px; bottom: 20px; padding: 2px; height: auto;";

           this.$refs.cmEditor.setStyle(styleStr);

       },

       //获取内容

       getValue() {

           let content = this.$refs.cmEditor.getValue();

           console.log(content);

       },

       //修改内容

       setValue() {

           let jsonValue = {

               name: "laiyu",

               addr: "广东省深圳市",

               other: "nothing",

               tel: "168888888",

               intro: [{ item1: "item1" }]

           };

 

           this.$refs.cmEditor.setValue(JSON.stringify(jsonValue));

       }

   }

};

</script>

 

<style>

.CodeMirror {

   position: absolute;

   top: 80px;

   left: 2px;

   right: 5px;

   bottom: 0px;

   padding: 2px;

   height: auto;

   overflow-y: auto;

}

</style>

 

<style lang="scss" scoped>

.code-mirror-div {

   position: absolute;

   top: 0px;

   left: 2px;

   right: 5px;

   bottom: 0px;

   padding: 2px;

   .tool-bar {

       top: 20px;

       margin: 30px 2px 0px 20px;

   }

}

</style>

 

效果展示

 

 

 

 

 

 

  1. 1.  支持多主题

 

 

 

  1. 2. 代码折叠/展开

 

 

 

 

 

 

 

 

  1. 3. 静态代码语法检查

 

 

 

 

 

  1. 4.   查找内容

 

 

 

  1. 5.   批量替换内容

 

 

 

  1. 6.   跳转到指定行

 

 

 

  1. 7. 自动补全提示

 

 

 

 

 

 

 

 

  1. 8. 自动匹配xml标签

 

 

 

 

  1. 9.   自动匹配括号

 

 

  1. 10.  鼠标点击高亮匹配单词

 

 

 

 

目录
相关文章
|
6月前
|
JavaScript
Vue 项目使用 json-editor (二)
Vue 项目使用 json-editor (二)
302 0
|
6月前
|
JavaScript
Vue在Element UI下使用富文本框插件quill-editor(我个人不推荐用这个复杂的富文本插件)
Vue在Element UI下使用富文本框插件quill-editor(我个人不推荐用这个复杂的富文本插件)
|
3月前
|
存储 JavaScript 前端开发
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
文章展示了在Vue项目中通过集成Quill富文本编辑器实现公告功能的完整开发过程,包括前端的公告发布、修改、删除操作以及后端的数据存储和处理逻辑。
Vue中通过集成Quill富文本编辑器实现公告的发布。Vue项目中vue-quill-editor的安装与使用【实战开发应用】
|
3月前
|
JavaScript
在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】
文章详细介绍了在Vue项目中安装和使用`vue-quill-editor`的步骤,包括如何通过npm安装、局部挂载、在Vue页面中引入和配置使用。同时,还提供了如何实现图片的缩放和拖拽功能的进阶教程,涉及到安装额外的插件`quill-image-drop-module`和`quill-image-resize-module`,以及对Webpack配置的调整。最后,文章还提供了实际效果展示和一些后续可能的拓展功能,如上传视频和将图片上传到服务器等。
在Vue项目中vue-quill-editor的安装与使用【详细图解+过程+包含图片的缩放拖拽】
|
4月前
|
JavaScript
【vue】 vue2 中使用 Tinymce 富文本编辑器
【vue】 vue2 中使用 Tinymce 富文本编辑器
586 6
|
4月前
|
JSON JavaScript 数据格式
文本-----wangEditor的使用,设置和获取内容,展示HTML无样式怎么办????console同步展示怎样写,Vue的配置在Vue3配置文件中的配置,是editor中的v-model绑定的值
文本-----wangEditor的使用,设置和获取内容,展示HTML无样式怎么办????console同步展示怎样写,Vue的配置在Vue3配置文件中的配置,是editor中的v-model绑定的值
|
4月前
|
JavaScript
【vue】 Tinymce 富文本编辑器 不想让上传的图片转换成base64,而是链接
【vue】 Tinymce 富文本编辑器 不想让上传的图片转换成base64,而是链接
299 0
|
4月前
|
JavaScript 前端开发
vue 富文本编辑器 quill (含代码高亮、自定义字体、汉化、鼠标悬浮提示、组件封装等)
vue 富文本编辑器 quill (含代码高亮、自定义字体、汉化、鼠标悬浮提示、组件封装等)
220 0
|
4月前
|
SQL JavaScript
vue 代码编辑器 vue-codemirror
vue 代码编辑器 vue-codemirror
65 0
|
6月前
|
存储 JavaScript 前端开发
笔.COOL,一个功能完备、使用便捷的在线HTML/CSS/JS以及Vue编辑器和作品分享平台
笔.COOL是一个新兴的在线 HTML/CSS/JS 及 Vue 编辑器,提供实时预览和云端存储功能。用户可以随时随地编写和保存代码,同时分享作品给他人预览和学习。它也是一个实用的 BUG 复现工具,支持嵌入编辑器到博客,促进代码交流。社区活跃,适合开发者展示作品、获取灵感和学习。