1、导入插件
npm install codemirror
2、Api使用链接
[https://blog.csdn.net/jlu_lei/article/details/80259697]
3、引包
<template>
<div class="json-editor">
<textarea ref="textarea"/>
</div>
</template>
<script>
import CodeMirror from 'codemirror'
import 'codemirror/addon/lint/lint.css'
import 'codemirror/lib/codemirror.css'
import 'codemirror/theme/rubyblue.css'
// require('script-loader!jsonlint')
import 'codemirror/mode/javascript/javascript'
import 'codemirror/mode/python/python'
import 'codemirror/addon/lint/lint'
import 'codemirror/addon/lint/json-lint'
export default {
/* eslint-disable vue/require-prop-types */
props: ['value'],
data() {
return {
jsonEditor: false
}
},
watch: {
value(value) {
const editor_value = this.jsonEditor.getValue()
if (value !== editor_value) {
this.jsonEditor.setValue(this.value)
}
}
},
// 初始化编译器时可设置属性
// value:初始内容
// Mode:设置编译器编程语言关联内容,对应mine值
// theme:编译器的主题,需要引入对应的包
// tabSize:tab的空格宽度
// lineNumbers:是否使用行号
// smartIndent:自动缩进是否开启
// indentUnit:缩进单位
// keyMap:快捷键,default使用默认快捷键,除此之外包括emacs,sublime,vim快捷键,使用需引入工具
// import codemirror/keymap/sublime.js
// import codemirror/keymap/emacs.js
// import codemirror/keymap/vim.js
mounted() {
this.jsonEditor = CodeMirror.fromTextArea(this.$refs.textarea, {
lineNumbers: true,
mode: 'python',
gutters: ['CodeMirror-lint-markers'],
theme: 'rubyblue',
lint: true
})
this.jsonEditor.setValue(this.value)
this.jsonEditor.on('change', cm => {
this.$emit('changed', cm.getValue())
this.$emit('input', cm.getValue())
})
},
methods: {
getValue() {
return this.jsonEditor.getValue()
}
}
}
</script>
<style scoped>
.json-editor{
height: 100%;
position: relative;
}
.json-editor >>> .CodeMirror {
height: auto;
}
.json-editor >>> .CodeMirror-scroll{
min-height: 500px;
}
.json-editor >>> .cm-s-rubyblue span.cm-string {
color: #F08047;
}
</style>