Vite管理的Vue3项目中monaco editer的使用以及组件封装

server/2025/4/1 7:08:59/

文章目录

  • 背景
  • 环境说明
  • 安装流程以及组件封装
    • 引入依赖
    • 封装组件
  • 外部使用
    • 实现效果
  • v-model实现原理

背景

做oj系统的时候,需要使用代码编辑器,决定使用Monaco Editor,但是因为自身能力问题,读不懂官网文档,最终结合ai和网友的帖子成功引入,并封装了组件,支持v-model接收文档内容。希望可以帮助到别人。

环境说明

  • vite
  • vue3
  • pnpm

安装流程以及组件封装

引入依赖

pnpm install monaco-editor

封装组件

<script setup lang="ts">
import * as monaco from 'monaco-editor'
import { onMounted, ref } from 'vue'// 容器对象
const editorContainer = ref()// 编辑器对象
let codeEditor: monaco.editor.IStandaloneCodeEditor | null = null// 声明一个input事件
const emit = defineEmits(['update:modelValue'])// 从父组件中接收
const props = defineProps({language: {type: String,default: 'javascript'},modelValue: {type: String,default: '',required: true}
})onMounted(() => {codeEditor = monaco.editor.create(editorContainer.value, {value: props.modelValue,language: props.language,lineNumbers: "on",roundedSelection: false,scrollBeyondLastLine: false,readOnly: false,theme: "vs",fontSize: 24})// 设置监听事件codeEditor.onDidChangeModelContent(() => {emit('update:modelValue', codeEditor?.getValue())})
})
</script><template><div ref="editorContainer" style="height: 100%; width: 100%"/>
</template><style scoped></style>

外部使用

<script setup lang="ts">
import CodeEditor from '@/components/editor/CodeEditor/CodeEditor.vue'
import { ref } from 'vue'// 编程语言
const codeLanguage = ref('java')// 代码编辑器值
const text = ref('')</script><template><a-row><a-col :span="22" :offset="1"><md-edit style="border: 1px black solid" @getMdEditText="getMdEditText" /><div style="height: 500px; width: 100%; border: 1px black solid"><code-editor :language="codeLanguage" v-model="text"/>获取到的值:{{ text }}</div></a-col></a-row>
</template>

实现效果

在这里插入图片描述

v-model实现原理

v-model本身是vue提供的一个语法糖。v-model = @update:modelValue + :modelValue。
即当父组件中的modelValue值发生改变时,通过:modelValue传入子组件,子组件对完成页面渲染。当子组件中的钩子函数被触发时(即编辑器中的值被改变时),通过emit触发update:modelValue事件,向父组件中传值,父组件中修改modelValue的值。


http://www.ppmy.cn/server/179307.html

相关文章

常⻅框架漏洞--ThinkPHP

Thinkphp5x远程命令执⾏及getshell 环境搭建 cd vulhub/thinkphp/5-rce docker-compose up -d #启动环境 访问网址 漏洞利⽤ ?s/Index/\think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]-1 ? sindex/think\app/invokefunctio…

(UI自动化测试web端)第二篇:元素定位的方法_css定位ID选择器

看代码里的【find_element_by_css_selector( )】( )里的表达式怎么写&#xff1f; 文章介绍了第一种写法id选择器&#xff0c;其实XPath元素定位要比CSS好用&#xff0c;原因是CSS无法使用下标&#xff08;工作当中也是常用的xpath&#xff09;&#xff0c;但CSS定位速度比XPat…

Python与区块链隐私保护技术:如何在去中心化世界中保障数据安全

Python与区块链隐私保护技术:如何在去中心化世界中保障数据安全 在区块链世界里,透明性和不可篡改性是两大核心优势,但这也带来了一个悖论——如何在公开账本的同时保障用户隐私?如果你的交易记录对所有人可见,如何防止敏感信息泄露? Python 作为区块链开发中最受欢迎的…

Bash 脚本基础

一、Bash 脚本基础 什么是 Bash 脚本&#xff1a;Bash 脚本是一种文本文件&#xff0c;其中包含了一系列的命令&#xff0c;这些命令可以被 Bash shell 执行。它用于自动化重复性的任务&#xff0c;提高工作效率。 Bash 脚本的基本结构&#xff1a;以 #!/bin/bash 开头&#x…

分类——数学公式推导全过程

文章目录 一、引入案例 二、准备知识 1. 内积 2. 感知机 3. 权重向量的更新表达式 4. 线性可分 三、 逻辑回归 1&#xff09;sigmoid 函数 2&#xff09;决策边界 3&#xff09;似然函数 4&#xff09;对数似然函数 5&#xff09;线性不可分 一、引入案例 根据尺寸…

Cocos Creator Shader入门实战(五):材质的了解、使用和动态构建

引擎&#xff1a;3.8.5 您好&#xff0c;我是鹤九日&#xff01; 回顾 前面的几篇文章&#xff0c;讲述的主要是Cocos引擎对Shader使用的一些固定规则&#xff0c;这里汇总下&#xff1a; 一、Shader实现基础是OpenGL ES可编程渲染管线&#xff0c;开发者只需关注顶点着色器和…

数据库的DDL操作

目录 一、创建数据库 &#xff08;1&#xff09;字符集和校验集 二、操作数据库 &#xff08;1&#xff09;查看数据库 &#xff08;2&#xff09;显示创建语句 &#xff08;3&#xff09;修改数据库 &#xff08;4&#xff09;删除数据库 三、数据库的备份与恢复 四、…

数据结构C语言练习01

今天的题目&#xff1a; 1.移除元素 2.删除排序数组中的重复项 3.合并两个有序数组 可点击上面链接先做 1.移除元素 思路&#xff1a; 方法1&#xff1a;暴力移除&#xff08;双循环移动元素&#xff09; 1. 从前往后遍历nums&#xff0c;找到val第一次出现的位置 2. 将…