目录
- 🦁 一. 前言
- 🦁 二. 探索过程
- 2.1 安装
- 2.2 配置 Monaco Editor
- 2.3 编写 Monaco Editor 代码编辑器
- 2.3.1 创建 Coding Editor 组件
- 2.3.2 父组件使用 CodingEditor 组件
- 2.4 效果展示
- 三. 总结
🦁 一. 前言
各位好!我是🦁,好久不写,可还安好?
前面在写一个项目的时候需要使用到在线代码编辑器,选用了微软研发的 Monaco Editor,但是由于官网教程有点难看懂,所以整合的时候遇到了不少麻烦!现在总结一下!
🦁 二. 探索过程
2.1 安装
首先,在 Vite 项目中通过命令行安装 Monaco Editor,命令如下:
npm install monaco-editor
2.2 配置 Monaco Editor
通过命令配置 Monaco Editor,指定它的加载路径和其他配置项,咱们依据官网教程,通过安装 vite-plugin-monaco
插件来完成这一过程。
npm install vite-plugin-monaco
然后在配置文件使用该插件:
import ViteMonacoPlugin from 'vite-plugin-monaco-editor'
export default defineConfig({
plugins: [
vue(),
ViteMonacoPlugin({}),
],
});
这个插件将配置 Monaco Editor 的加载路径,并将相关文件添加到你的项目中。
2.3 编写 Monaco Editor 代码编辑器
为了方便编辑器更方便使用,选择将其封装成一个组件,复用简单,并且代码更易于维护。
2.3.1 创建 Coding Editor 组件
<template>
<div ref="editorContainer" style="height: 400px;"></div>
</template>
<script setup>
import * as monaco from 'monaco-editor'; // 全部导入
import { ref, onMounted } from 'vue';
export default {
props: {
value: String,
language: String,
},
setup(props) {
const editor = ref(null);
onMounted(() => {
editor.value = monaco.editor.create(document.getElementById('editorContainer'), {
value: props.value || '',
language: props.language || 'java',
minimap: {
enabled: true,
},
colorDecorators: true, //颜色装饰器
readOnly: false, //是否开启已读功能
theme: "vs-dark", //主题
});
// 监听编辑器内容变化
editor.value.onDidChangeModelContent(() => {
// 触发父组件的 change 事件,通知编辑器内容变化
props.onChange(editor.value.getValue());
});
});
return {
editor,
};
},
};
</script>
MonacoEditor
组件接收 value 和 language 作为 props
,并通过 @change
事件通知父组件编辑器内容的变化。
2.3.2 父组件使用 CodingEditor 组件
<template>
<div>
<CodingEditor :value="code" :language="language" @change="handleEditorChange" />
</div>
</template>
<script setup>
import CodingEditor from '@/component/CodingEditor/index.vue'
import { ref } from 'vue';
export default {
components: {
CodingEditor,
},
setup() {
const code = ref('console.log("Hello, Monaco Editor!");');
const language = ref('javascript');
// 处理编辑器内容变化的方法
const handleEditorChange = (value) => {
console.log('Editor content changed in parent component:', value);
};
return {
code,
language,
handleEditorChange,
};
},
};
</script>
handleEditorChange 方法会在 CodingEditor 组件的内容发生变化时被调用。这是通过在父组件中使用 @change 事件监听来实现的。
确保在 MonacoEditor.vue 组件中正确触发 props.onChange 事件,然后在父组件中使用 @change 事件即可监听 Monaco Editor 的内容变化。
2.4 效果展示
三. 总结
一个 Demo 总结,希望能帮助到您!具体源码获取,可见我的:Gitee。
咱们下期再会!