因为我的项目中须要在前端编写一些yaml,json格局的配置文件。一开始用的codemirror集成到我的项目中有很多问题,故转而应用ace Editor。

首先引入根本依赖

        //外围依赖        { src: 'https://cdn.bootcdn.net/ajax/libs/ace/1.4.9/ace.js' },        { src: 'https://cdn.bootcdn.net/ajax/libs/ace/1.4.9/ext-beautify.js' },        { src: 'https://cdn.bootcdn.net/ajax/libs/ace/1.4.9/ext-language_tools.js' },        //编辑器主题,选本人须要的~~~~        { src: 'https://cdn.bootcdn.net/ajax/libs/ace/1.4.9/theme-xcode.js' },        //语言反对,依据需要增加        { src: 'https://cdn.bootcdn.net/ajax/libs/ace/1.4.9/mode-yaml.js' },        { src: 'https://cdn.bootcdn.net/ajax/libs/ace/1.4.9/mode-javascript.js' },        { src: 'https://cdn.bootcdn.net/ajax/libs/ace/1.4.9/mode-json.js' },

编写组件(复制粘贴????)

<template>    <div ref="editor" :style="{height:height}" class="ace-editor" :id="Id"></div></template><script>import uniqueId from 'lodash/uniqueId'export default {    name: "AceEditor",    props:{        value:{            type:String,            default: ""        },        height:{            type:String,            default:"400px"        },        readOnly:{            type:Boolean,            default: false        },        mode:{            type:String,            default:"json"        }    },    mounted(){        this.initEditor()    },    data(){        this.editor =null;        this.Id = uniqueId('aceEditor')        return{                    }            },    computed:{        code:{ //数据更新告诉父组件更新数据            set(val){                this.$emit('input',val)            },            get(){                 return this.value            }        },    },    watch:{        code(){ //父组件中数据变动,同步到ace Editor            //aceEditor.setValue调用后默认会全选所有文本内容,须要对光标进行非凡解决            // 缓存光标地位            const position = this.editor.getCursorPosition();            this.syncData()            this.editor.clearSelection();            this.editor.moveCursorToPosition(position);        },        mode(mode){            this.changeMode(mode)        },        readOnly(b){            this.setReadOnly(b)        }    },    methods: {        initEditor(){            this.editor = ace.edit(this.Id);            this.editor.setTheme('ace/theme/xcode');            //编辑时同步数据            this.editor.session.on('change',(ev)=>{                this.code = this.editor.getValue()            })            //字体大小            this.editor.setFontSize(14)            this.syncData()            this.syncOptions()        },                changeMode(modeName){            let mode ={                yaml:'ace/mode/yaml',                json:'ace/mode/json',                javascript:'ace/mode/javascript'            }            this.editor.session.setMode(mode[modeName]);        },        setReadOnly(readOnly){            this.editor.setReadOnly(readOnly)        },        syncOptions(){            this.setReadOnly(this.readOnly)            this.changeMode(this.mode)        },        syncData(){             this.editor.setValue(this.code)        },       }}</script><style scoped>    .ace-editor{        position: relative;        height:300px;        border: 1px solid #ccc;        border-radius:2px;    }    .ace-editor /deep/ .ace_print-margin{         display:none;    }</style>

应用

<ace-editor v-model="json" mode="json"  ></cae-editor>