126 lines
3.3 KiB
Vue
126 lines
3.3 KiB
Vue
|
|
<template>
|
|||
|
|
<div>
|
|||
|
|
<editor
|
|||
|
|
:value="content"
|
|||
|
|
@input="handleInput"
|
|||
|
|
@init="editorInit"
|
|||
|
|
:lang="aceConfig.selectLang"
|
|||
|
|
:theme="aceConfig.selectTheme"
|
|||
|
|
:options="aceConfig.options"
|
|||
|
|
width="100%"
|
|||
|
|
height="400px"/>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
// 编辑器主题
|
|||
|
|
const themes = [
|
|||
|
|
'xcode',
|
|||
|
|
'eclipse',
|
|||
|
|
'monokai',
|
|||
|
|
'cobalt'
|
|||
|
|
]
|
|||
|
|
// 编辑器语言
|
|||
|
|
const langs = [
|
|||
|
|
'c_cpp',
|
|||
|
|
'java',
|
|||
|
|
'javascript',
|
|||
|
|
'golang'
|
|||
|
|
]
|
|||
|
|
// tabs
|
|||
|
|
const tabs = [2, 4, 8]
|
|||
|
|
// 字体大小
|
|||
|
|
const fontSizes = [14, 15, 16, 17, 18, 19, 20, 21, 22]
|
|||
|
|
// 编辑器选项
|
|||
|
|
const options = {
|
|||
|
|
tabSize: 4, // tab默认大小
|
|||
|
|
showPrintMargin: false, // 去除编辑器里的竖线
|
|||
|
|
fontSize: 20, // 字体大小
|
|||
|
|
highlightActiveLine: true, // 高亮配置
|
|||
|
|
enableBasicAutocompletion: true, //启用基本自动完成
|
|||
|
|
enableSnippets: true, // 启用代码段
|
|||
|
|
enableLiveAutocompletion: true, // 启用实时自动完成
|
|||
|
|
}
|
|||
|
|
export default {
|
|||
|
|
name: "CodeEdit",
|
|||
|
|
components: {
|
|||
|
|
editor: require('vue2-ace-editor'),
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
visible: false, // 模态窗口显示控制
|
|||
|
|
aceConfig: { // 代码块配置
|
|||
|
|
langs, // 语言
|
|||
|
|
themes, // 主题
|
|||
|
|
tabs, // tab空格
|
|||
|
|
fontSizes,
|
|||
|
|
options, // 编辑器属性设置
|
|||
|
|
selectTheme: 'xcode', // 默认选择的主题
|
|||
|
|
selectLang: 'c_cpp', // 默认选择的语言
|
|||
|
|
readOnly: false, // 是否只读
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// 接收父组件v-model传来的值
|
|||
|
|
model: {
|
|||
|
|
prop: 'content',
|
|||
|
|
event: 'change'
|
|||
|
|
},
|
|||
|
|
props: {
|
|||
|
|
content: String // content就是上面prop中声明的值,要保持一致
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
// 当该组件中的值改变时,通过该方法将该组件值传给父组件,实现组件间双向绑定
|
|||
|
|
handleInput(e) {
|
|||
|
|
this.$emit('change', e) // 这里e是每次子组件修改的值,change就是上面event中声明的,不要变
|
|||
|
|
},
|
|||
|
|
// 显示'编辑器设置'模态窗口
|
|||
|
|
showSettingModal() {
|
|||
|
|
this.visible = true
|
|||
|
|
},
|
|||
|
|
// '编辑器设置'模态窗口确认按钮回调
|
|||
|
|
handleOk() {
|
|||
|
|
this.visible = false
|
|||
|
|
// this.editorInit()
|
|||
|
|
},
|
|||
|
|
// 代码块主题切换
|
|||
|
|
handleThemeChange(value) {
|
|||
|
|
this.aceConfig.selectTheme = value
|
|||
|
|
this.editorInit()
|
|||
|
|
},
|
|||
|
|
// 代码块语言切换
|
|||
|
|
handleLangChange(value) {
|
|||
|
|
this.aceConfig.selectLang = value
|
|||
|
|
this.editorInit()
|
|||
|
|
},
|
|||
|
|
// tab切换
|
|||
|
|
handleTabChange(value) {
|
|||
|
|
this.aceConfig.options.tabSize = value
|
|||
|
|
this.editorInit()
|
|||
|
|
},
|
|||
|
|
// 字体大小切换
|
|||
|
|
handleFontChange(value) {
|
|||
|
|
this.aceConfig.options.tabSize = value
|
|||
|
|
this.editorInit()
|
|||
|
|
},
|
|||
|
|
// 代码块初始化
|
|||
|
|
editorInit () {
|
|||
|
|
require('brace/ext/language_tools') // language extension prerequsite...
|
|||
|
|
require(`brace/mode/${this.aceConfig.selectLang}`) // 语言
|
|||
|
|
require(`brace/theme/${this.aceConfig.selectTheme}`) // 主题
|
|||
|
|
},
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped>
|
|||
|
|
.settingTitle{
|
|||
|
|
font-size: larger;
|
|||
|
|
}
|
|||
|
|
.settingDescription{
|
|||
|
|
font-size: small;
|
|||
|
|
color: #a8a8af
|
|||
|
|
}
|
|||
|
|
</style>
|
|||
|
|
|