[转]vue-codemirror 代码编辑器
codemirror 是一个非常强大的代码编辑器插件,但官方并没有提供 vue 的支持版本,不过跟 vue 集成的步骤并不复杂,以下是具体实现
更多精彩
相关网址
- Vue 官方插件库推荐的集成实现
- 这个实现做的比较全面,但不支持动态语法高亮的切换
- codemirror 支持的语言类型
- codemirror 官网
实现效果
具体实现
<template><div class="in-coder-panel"><textarea ref="textarea"></textarea><el-select class="code-mode-select" v-model="mode"@change="changeMode"><el-option v-for="mode in modes":key="mode.value" :label="mode.label" :value="mode.value"></el-option></el-select></div>
</template><script type="text/ecmascript-6">// 引入全局实例import _CodeMirror from 'codemirror'// 核心样式import 'codemirror/lib/codemirror.css'// 引入主题后还需要在 options 中指定主题才会生效import 'codemirror/theme/cobalt.css'// 需要引入具体的语法高亮库才会有对应的语法高亮效果// codemirror 官方其实支持通过 /addon/mode/loadmode.js 和 /mode/meta.js 来实现动态加载对应语法高亮库// 但 vue 貌似没有无法在实例初始化后再动态加载对应 JS ,所以此处才把对应的 JS 提前引入import 'codemirror/mode/javascript/javascript.js'import 'codemirror/mode/css/css.js'import 'codemirror/mode/xml/xml.js'import 'codemirror/mode/clike/clike.js'import 'codemirror/mode/markdown/markdown.js'import 'codemirror/mode/python/python.js'import 'codemirror/mode/r/r.js'import 'codemirror/mode/shell/shell.js'import 'codemirror/mode/sql/sql.js'import 'codemirror/mode/swift/swift.js'import 'codemirror/mode/vue/vue.js'// 尝试获取全局实例const CodeMirror = window.CodeMirror || _CodeMirrorexport default {name: 'in-coder',props: {// 外部传入的内容,用于实现双向绑定value: String,// 外部传入的语法类型language: {type: String,default: null}},data () {return {// 内部真实的内容code: '',// 默认的语法类型mode: 'javascript',// 编辑器实例coder: null,// 默认配置options: {// 缩进格式tabSize: 2,// 主题,对应主题库 JS 需要提前引入theme: 'cobalt',// 显示行号lineNumbers: true,line: true},// 支持切换的语法高亮类型,对应 JS 已经提前引入// 使用的是 MIME-TYPE ,不过作为前缀的 text/ 在后面指定时写死了modes: [{value: 'css',label: 'CSS'}, {value: 'javascript',label: 'Javascript'}, {value: 'html',label: 'XML/HTML'}, {value: 'x-java',label: 'Java'}, {value: 'x-objectivec',label: 'Objective-C'}, {value: 'x-python',label: 'Python'}, {value: 'x-rsrc',label: 'R'}, {value: 'x-sh',label: 'Shell'}, {value: 'x-sql',label: 'SQL'}, {value: 'x-swift',label: 'Swift'}, {value: 'x-vue',label: 'Vue'}, {value: 'markdown',label: 'Markdown'}]}},mounted () {// 初始化this._initialize()},methods: {// 初始化_initialize () {// 初始化编辑器实例,传入需要被实例化的文本域对象和默认配置this.coder = CodeMirror.fromTextArea(this.$refs.textarea, this.options)// 编辑器赋值this.coder.setValue(this.value || this.code)// 支持双向绑定this.coder.on('change', (coder) => {this.code = coder.getValue()if (this.$emit) {this.$emit('input', this.code)}})// 尝试从父容器获取语法类型if (this.language) {// 获取具体的语法类型对象let modeObj = this._getLanguage(this.language)// 判断父容器传入的语法是否被支持if (modeObj) {this.mode = modeObj.label}}},// 获取当前语法类型_getLanguage (language) {// 在支持的语法类型列表中寻找传入的语法类型return this.modes.find((mode) => {// 所有的值都忽略大小写,方便比较let currentLanguage = language.toLowerCase()let currentLabel = mode.label.toLowerCase()let currentValue = mode.value.toLowerCase()// 由于真实值可能不规范,例如 java 的真实值是 x-java ,所以讲 value 和 label 同时和传入语法进行比较return currentLabel === currentLanguage || currentValue === currentLanguage})},// 更改模式changeMode (val) {// 修改编辑器的语法配置this.coder.setOption('mode', `text/${val}`)// 获取修改后的语法let label = this._getLanguage(val).label.toLowerCase()// 允许父容器通过以下函数监听当前的语法值this.$emit('language-change', label)}}}
</script><style lang="stylus" rel="stylesheet/stylus">.in-coder-panelflex-grow 1display flexposition relative.CodeMirrorflex-grow 1z-index 1.CodeMirror-codeline-height 19px.code-mode-selectposition absolutez-index 2right 10pxtop 10pxmax-width 130px
</style>
[转]vue-codemirror 代码编辑器相关推荐
- vue2使用Codemirror代码编辑器插件
让我们先看看需求 :一个有SQL语言提示代码编辑器 一 . 我这里用的是vue2 三种方法,得指定版本号,不指定就是默认最新,版本6以上都是vue3的版本,引入使用会报错 vue3的版本叫vue-c ...
- vue集成codemirror代码编辑器
点击上方" 青年码农 "关注 回复"特效源码"可获取各种资料 CodeMirror是一个用 JavaScript 为浏览器实现的通用文本编辑器.它专门用于编辑代 ...
- CodeMIrror.js在线代码编辑器简单使用
代码高亮是程序员的刚需,不管是在笔记类,论坛类,博客类web网站中,都对代码高亮提出要求,不高亮的代码阅读体验很差,codeMirror是一个前端代码高亮库,使用方便.CodeMirror 是一款在线 ...
- vue2项目使用codemirror插件实现代码编辑器功能
1.使用npm安装依赖 npm install --save codemirror 2.在页面中放入如下代码 <template><textarea ref="mycode ...
- 通过vue-codemirror和CodeMirror将代码编辑器添加到web项目中
前言 最近项目中有一个需求是,需要添加一个代码编辑器到项目中.也不知道是谁设计的,将代码编辑器添加到项目中? 费了九牛二虎之力终于找到了 vue-codemirror 和 CodeMirror 感觉是 ...
- vue2实现codemirror在线代码编辑器(代码提示,行数显示..)
项目需求 需要在管理系统模块中实现用户SQL语句自查询,实现一个代码编辑器,要求有执行,清空,代码提示,行数显示功能,,实现效果如下: -------------------------------- ...
- 在线js编辑器来喽!CodeMirror页面代码编辑器
背景介绍:在公司的开发平台使用时需要用到js代码编写输入框,大家都是在vscode之类的编辑器写好后粘贴,在用重构项目的时候想到了这里的弊端,想在页面上也可以有js 的结构可编写代码,就清晰方便很多. ...
- CodeMirror 5.26.0 发布,在线代码编辑器
CodeMirror 5.26.0 已发布,CodeMirror 是一款"Online Source Editor",基于 Javascript,短小精悍,实时在线代码高亮显示,它 ...
- 在线代码编辑器 Codemirror 的轻量级 React 组件
代码编辑器 CodeMirror 的轻量级 React 组件 demo @uiw-react.github.io/react-codem- 特性: ? 自动根据 mode 配置加载 mode 文件. ...
- 在线代码编辑器 CodeMirror 配置说明 - javascript开发的代码语法高亮显示引擎
CodeMirror是一款在线的支持语法高亮的代码编辑器.官网: http://codemirror.net/ 下载后,解压开得到的文件夹中,lib下是放的是核心库和核心css,mode下放的是各种支 ...
最新文章
- Failed to register Grid Infrastructure type ora.mdns.type
- 联想笔记本Win10 F1-F12失效的解决方法
- python跟php如何共用mysql_Python 3 多个函数共用一个mysql连接
- 如何得出数组里最大_相邻两数的最大差值(超巧妙解法)
- 机器翻译 - 日期翻译
- Cannot convert type ‘ASP.login_aspx’ to ‘System.Web.UI.WebControls.Login’的解决方法
- SpringBoot项目@Email不起作用
- KVM虚拟化查看虚拟机IP
- 使用AIR中的File对象
- [转载] 高等应用数学问题的matlab求解——第4章 线性代数问题的计算机求解
- python办公ppt_最全总结 | 聊聊 Python 办公自动化之 PPT(中)
- 笔录软件在linux系统,weblogic的在redhat linux下使用笔录
- wordpress专属线报网主题模板
- 数据库在一对一、一对多、多对多怎么设计表关系
- 数据三等分离散python_数据自习室01-描述性统计量
- 【黑马程序员pink老师前端】HTML综合案例(二)
- unity自定义组件
- 【信号处理】数字基带信号波形仿真含Matlab源码
- 注解类型异常:@ComponentScan ANNOTATION type filter requires an annotation typ
- Android解码视频每一帧,Android 获取视频缩略图(获取视频每帧数据)的优化方案