monaco-editor类似于vscode功能,可以实现javascript、sql、json等查看编辑功能,最近在做Vue实现monaco-editor脚本对比和脚本查看功能以及自定义高亮字段
实现sql脚本查看功能以及配置
加上随机数防止多次点击重复加载多个脚本查看
<div
ref="monaco"
:key="Math.random()"
/>
<script>
import * as monaco from 'monaco-editor'
import {conf, language} from 'monaco-editor/esm/vs/basic-languages/sql/sql'
data() {
return {
value: '',
editor: null
}
},
mounted(){
this.initEditor()
},
methods: {
initEditor(){
this.editor = monaco.editor.create(
this.$refs.editor, {
value: this.value,
roundedSelection: false,
language:'sql',
automaticLayout: true,
readOnly: false,
selectOnLineNumbers: true,
minimap: {
enabled: false
},
theme:'vs'
})
language.keywords.push('C1','C2')
monaco.languages.setMonarchTokensProvider('sql', language);
},
getValue(){
editor.getValue();
},
}
</script>
实现脚本对比,能定位到哪一行sql脚本不同,以及除开指定的字段高亮,可以自定义字段高亮
<div
ref="container"
:key="Math.random()"
style="height:100%;width:100%"
/>
<script>
import * as monaco from 'monaco-editor'
import {conf, language} from 'monaco-editor/esm/vs/basic-languages/sql/sql'
let monacoDiffInstance = null
data() {
return {
sqlData: '',
oldSqlData: '',
language: 'sql'
}
},
mounted(){
this.initEditor()
},
methods: {
initEditor(){
monacoDiffInstance = monaco.editor.createDiffEditor(
this.$refs['container'], {
automaticLayout: true,
readOnly: false,
selectOnLineNumbers: true,
hideCursorInOverviewRuler: false,
overviewRulerLanes: 0,
overviewRulerBorder: true,
theme:'vs'
})
language.keywords.push('aa','aa')
monaco.languages.setMonarchTokensProvider('sql', language);
monacoDiffInstance.setModel({
original: monaco.editor.createModel(this.sqlData, this.language),
modified: monaco.editor.createModel(this.oldSqlData, this.language)
})
},
getValue(){
editor.getValue();
},
}
</script>