Vite 构建的 Vue3 项目如何整合 Monaco Editor 代码编辑器

本文主要是介绍Vite 构建的 Vue3 项目如何整合 Monaco Editor 代码编辑器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 🦁 一. 前言
  • 🦁 二. 探索过程
    • 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。
咱们下期再会!

这篇关于Vite 构建的 Vue3 项目如何整合 Monaco Editor 代码编辑器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761053

相关文章

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me