赞
踩
1.封装组件
- <template>
- <div className="yaml-editor">
- <textarea ref="textarea"/>
- <div>
- <span style="margin-right: 10px">Ctrl + F</span>
- <el-button @click="find">查找</el-button>
- </div>
- </div>
- </template>
-
- <script>
- import CodeMirror from 'codemirror'
- import 'codemirror/addon/lint/lint.css'
- import 'codemirror/lib/codemirror.css'
- import 'codemirror/theme/monokai.css'
- import 'codemirror/theme/midnight.css'
- import 'codemirror/theme/mdn-like.css'
- import 'codemirror/mode/yaml/yaml'
- import 'codemirror/addon/lint/lint'
- import 'codemirror/addon/lint/yaml-lint'
-
- // 代码折叠
- import 'codemirror/addon/fold/foldgutter.css'
- import 'codemirror/addon/fold/foldcode.js'
- import 'codemirror/addon/fold/foldgutter.js'
- import 'codemirror/addon/fold/brace-fold.js'
- import 'codemirror/addon/fold/comment-fold.js'
- import 'codemirror/addon/fold/xml-fold.js'
- import 'codemirror/addon/fold/markdown-fold.js'
- import 'codemirror/addon/fold/indent-fold.js'
-
- // 查找
- import 'codemirror/addon/scroll/annotatescrollbar.js'
- import 'codemirror/addon/search/matchesonscrollbar.js'
- import 'codemirror/addon/search/match-highlighter.js'
- import 'codemirror/addon/search/jump-to-line.js'
- import 'codemirror/addon/dialog/dialog.js'
- import 'codemirror/addon/dialog/dialog.css'
- import 'codemirror/addon/search/searchcursor.js'
- import 'codemirror/addon/search/search.js'
-
- window.jsyaml = require('js-yaml') // 引入js-yaml为codemirror提高语法检查核心支持
-
- export default {
- name: 'YamlEditor',
- props: {
- value: {
- type: String,
- default: ''
- },
- disabled: {
- type: Boolean,
- default: false
- },
- showNumber: {
- type: Boolean,
- default: true
- }
- },
- data() {
- return {
- yamlEditor: null
- }
- },
- watch: {
- value(value) {
- const editorValue = this.yamlEditor.getValue()
- if (value !== editorValue) {
- this.yamlEditor.setValue(this.value)
- }
- }
- },
- mounted() {
- this.yamlEditor = CodeMirror.fromTextArea(this.$refs.textarea, {
- lineNumbers: true, // 显示行号
- mode: 'text/x-yaml', // 语法model
- readOnly: false, // 是否禁止输入
- theme: 'mdn-like', // 编辑器主题 midnight/mdn-like/monokai
- foldGutter: true, // 代码折叠
- lint: true, // 开启语法检查
- gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter', 'CodeMirror-lint-markers'],
- indentUnit: 4, // 缩进
-
-
- indentWithTabs: true,
- styleActiveLine: true, // 当前行背景高亮
- })
-
- this.yamlEditor.setValue(this.value)
- this.yamlEditor.on('change', (cm) => {
- this.$emit('changed', cm.getValue())
- this.$emit('input', cm.getValue())
- })
- },
- methods: {
- getValue() {
- return this.yamlEditor.getValue()
- },
- find() {
- console.log(1)
- this.yamlEditor.execCommand('find')
- }
- }
- }
- </script>
-
- <style scoped>
- .yaml-editor {
- height: 100%;
- }
-
- .yaml-editor >>> .CodeMirror {
- height: 100%;
- }
-
- .yaml-editor >>> .CodeMirror-scroll {
- }
-
- .yaml-editor >>> .cm-s-rubyblue span.cm-string {
- color: #f08047;
- }
-
- /deep/ .cm-s-mdn-like {
- height: 400px;
- }
- </style>

2.父组件使用
<yaml-editor v-model="YamlValue" :disabled="disabled" />
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。