The official source code of monaco-editor-vue is as follows Index.js import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'; function noop() { } export { monaco }; export default { name: 'MonacoEditor', props: { diffEditor: { type: Boolean, default: false }, //Whether to use diff mode width: { type: [String, Number], default: '100%' }, height: {type: [String, Number], default: '100%'}, original: String, //Only valid in diff mode value: String, language: {type: String, default: 'javascript'}, theme: {type: String, default: 'vs'}, options: {type: Object, default() {return {};}}, editorMounted: {type: Function, default: noop}, editorBeforeMount: {type: Function, default: noop} }, watch: options: deep: true, handler(options) { this.editor && this.editor.updateOptions(options); } }, value() { this.editor && this.value !== this._getValue() && this._setValue(this.value); }, language() { if(!this.editor) return; if(this.diffEditor){ //Update language in diff mode const { original, modified } = this.editor.getModel(); monaco.editor.setModelLanguage(original, this.language); monaco.editor.setModelLanguage(modified, this.language); }else monaco.editor.setModelLanguage(this.editor.getModel(), this.language); }, theme() { this.editor && monaco.editor.setTheme(this.theme); }, style() { this.editor && this.$nextTick(() => { this.editor.layout(); }); } }, computed: { style() { return { width: !/^\d+$/.test(this.width) ? this.width : `${this.width}px`, height: !/^\d+$/.test(this.height) ? this.height : `${this.height}px` } } }, mounted () { this.initMonaco(); }, beforeDestroy() { this.editor && this.editor.dispose(); }, render (h) { return ( <div class="monaco_editor_container" style={this.style}></div> ); }, methods: { initMonaco() { const { value, language, theme, options } = this; Object.assign(options, this._editorBeforeMount()); //Before editor initialization this.editor = monaco.editor[this.diffEditor ? 'createDiffEditor' : 'create'](this.$el, { value: value, language: language, theme: theme, ...options }); this.diffEditor && this._setModel(this.value, this.original); this._editorMounted(this.editor); //After the editor is initialized}, _getEditor() { if(!this.editor) return null; return this.diffEditor ? this.editor.modifiedEditor : this.editor; }, _setModel(value, original) { //Set model in diff mode const { language } = this; const originalModel = monaco.editor.createModel(original, language); const modifiedModel = monaco.editor.createModel(value, language); this.editor.setModel({ original: originalModel, modified: modifiedModel }); }, _setValue(value) { let editor = this._getEditor(); if(editor) return editor.setValue(value); }, _getValue() { let editor = this._getEditor(); if(!editor) return ''; return editor.getValue(); }, _editorBeforeMount() { const options = this.editorBeforeMount(monaco); return options || {}; }, _editorMounted(editor) { this.editorMounted(editor, monaco); if(this.diffEditor){ editor.onDidUpdateDiff((event) => { const value = this._getValue(); this._emitChange(value, event); }); }else{ editor.onDidChangeModelContent(event => { const value = this._getValue(); this._emitChange(value, event); }); } }, _emitChange(value, event) { this.$emit('change', value, event); this.$emit('input', value); } } } How to use the Define ref = "", use Refer to the following code test.vue <template> <div> <MonacoEditor ref="exampleEditor" width="100%" height="300" theme="vs-dark" language="javascript" :options="options" @change="codeInput" /> </div> </template> <script> import MonacoEditor from 'monaco-editor-vue' export default { components: MonacoEditor }, data() { return { } }, beforeCreate() { }, mounted() { }, methods: { this.$refs.exampleEditor._setValue('') } } This is the end of this article about vue using the methods in the reference library with source code. For more relevant vue using the reference library content, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future! You may also be interested in:
|
<<: Docker installation steps for Redmine
>>: How to use DQL commands to query data in MySQL
Table of contents 1. Spark vs. Hadoop 1.1 Disadva...
We don’t often encounter 404 pages when we browse...
This article example shares the specific code of ...
Table of contents 1. Background 2. Verification p...
Because the Base images pulled by Docker, such as...
When there is a lot of data to be displayed, the ...
Find the problem Let's look at the problem fi...
Use meta to implement timed refresh or jump of th...
In the actual project development process, the pag...
Table of contents Install mockjs in your project ...
mysqlslap Common parameter description –auto-gene...
When encapsulating Vue components, I will still u...
You may have noticed that the src or CSS backgroun...
Flex layout is a commonly used layout method nowa...
mysql query with multiple conditions Environment:...