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

文章目录

  • 背景
  • 环境说明
  • 安装流程以及组件封装
    • 引入依赖
    • 封装组件
  • 外部使用
    • 实现效果
  • 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.mzph.cn/news/898717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pdf文件分页按需查看

pdf预览本来打算粗暴点&#xff0c;一次性查看全部&#xff0c;但是一个pdf四五百页导致手机端查看超出内存直接崩掉&#xff0c;崩掉会导致页面疯狂刷新&#xff0c;所以不得不进行优化 解决思路大致如下&#xff1a; canvas转为blob格式以图片的形式加载在页面&#xff08;B…

算力100问☞第92问:为什么各地热衷建设算力中心?

目录 1、宏观分析 2、政府角度分析 3、投资者角度分析 在数字化浪潮中,各地对算力中心建设的热情高涨,这一现象背后潜藏着诸多深层次的原因,涵盖了经济、科技、社会等多个维度,且彼此交织,共同驱动着这一发展趋势。 1、宏观分析 从经济结构转型的底层逻辑来看,全球经…

Redis 内存管理

Redis 内存管理 1. Redis 给缓存数据设置过期时间的作用 给缓存数据设置过期时间&#xff08;TTL, Time-To-Live&#xff09;有以下几个重要作用&#xff1a; (1) 自动释放内存 避免缓存数据无限增长&#xff0c;导致 Redis 内存溢出。例如&#xff0c;在 会话管理、短连接…

PyCharm中使用pip安装PyTorch(从0开始仅需两步)

无需 anaconda&#xff0c;只使用 pip 也可以在 PyCharm 集成环境中配置深度学习 PyTorch。 本文全部信息及示范来自 PyTorch 官网。 以防你是super小白&#xff1a; PyCharm 中的命令是在 Python Console 中运行&#xff0c;界面左下角竖排图标第一个。 1. 安装前置包 numpy …

掌握新编程语言的秘诀:利用 AI 快速上手 Python、Go、Java 和 Rust

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

如何理解java中Stream流?

在Java中&#xff0c;Stream 是 Java 8 引入的一个强大API&#xff0c;用于处理集合&#xff08;如 List、Set、Map 等&#xff09;数据的流式操作。它提供了一种声明式、函数式的编程风格&#xff0c;可以高效地进行过滤、映射、排序、聚合等操作。 Stream 的核心概念 流&…

【Vitis AIE】FPGA快速部署ConvNet 示例MNIST数据集

AIE-ML 上的 MNIST ConvNet 版本&#xff1a;Vitis 2024.2 简介 本教程在 AMD VersalTM 自适应 SoC AIE-ML 上实现了一个卷积神经网络分类器&#xff0c;用于识别来自 MNIST 数据库 的手写数字。目标是说明如何将一个简单的机器学习示例分区和向量化到 Versal AI 引擎。MNIS…

ubuntu桌面图标异常——主目录下的所有文件(如文档、下载等)全部显示在桌面

ubuntu桌面图标异常 问题现象问题根源系统级解决方案方法一:全局修改(推荐多用户环境)方法二:单用户修改(推荐个人环境)操作验证与调试避坑指南扩展知识参考文档问题现象 主目录文件异常显示 用户主目录(如/home/user/)下的所有文件(如文档、下载等)全部显示在桌面,…

OceanBase 4.3.3 AP 解析:应用 RoaringBitmaps 类型处理海量数据的判重和基数统计

对于大数据开发人员而言&#xff0c;处理海量数据的判重操作和基数统计是常见需求&#xff0c;而 RoaringBitmap类型及其相关函数是当前非常高效的一种解决方案&#xff0c;许多大数据库产品已支持RoaringBitmap类型。OceanBase 4.3.3版本&#xff0c;作为专为OLAP场景设计的正…

W25Qxx

概述 FLASH FLASH是一种是非易失性存储器&#xff0c;即掉电后不会丢失数据&#xff0c;这和RAM&#xff08;随机存储器&#xff09;不同。 FLASH比起同作用的EEPROM有价格低的优点 FLASH的擦除操作是以扇区为单位的&#xff08;比起EEPROM来说操作较为不方便&#xff09; 芯片…

(滑动窗口)算法训练篇11--力扣3.无重复字符的最长字串(难度中等)

目录 1.题目链接&#xff1a;3.无重复字符的最长字符 2.题目描述&#xff1a; 3.解法(滑动窗口)&#xff1a; 1.题目链接&#xff1a;3.无重复字符的最长字符 2.题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例…

深度学习1—Python基础

深度学习1—python基础 你的第一个程序 print(hello world and hello deep learning!)基本数据结构 空值 (None)&#xff1a;在 Python 中&#xff0c;None 是一个特殊的对象&#xff0c;用于表示空值或缺失的值。它不同于数字 0&#xff0c;因为 0 是一个有意义的数字&#…

记一次MyBatis分页莫名其妙的失效,首次执行合适,后续执行分页失效且异常

代码几乎一样&#xff0c;为啥这个xml配置的就会出现莫名其妙的问题呢 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{propertymybatis_plus_first, modeI…

网络不可达

导致此问题原因较多&#xff0c;我只针对一种情况进行讨论&#xff0c;如果和文中症状不同&#xff0c;另寻他处&#xff0c;或者死马当活马医&#xff08;&#xff1f;&#xff09; 如需转载&#xff0c;标记出处 症状&#xff1a; 1.ping命令网络不可达 2.ifconfig中网卡en…

【AI News | 20250322】每日AI进展

AI Repos 1、DeTikZify 可以把草图或图形转换成TikZ代码的模型&#xff0c;可用来绘制复杂的科学图表&#xff0c;输入草图或文字描述即可转换成TikZ代码。DeTikZify强大的地方在于它能理解图表的语义信息&#xff0c; 能识别图表中的不同组成部分及其含义&#xff0c;比如坐标…

Debian12生产环境配置笔记

在 Debian 12 上进行生产环境配置的详细步骤&#xff0c;涵盖软件更新、基础软件安装、Docker 及 Redis 部署&#xff0c;以及 Nginx 配置多个虚拟主机等内容。所有命令均以 root 用户身份执行&#xff0c;无需添加 sudo 1. 更新软件 首先&#xff0c;确保系统上的所有软件包…

UE AI 模型自动生成导入场景中

打开小马的weix 关注下 搜索“技术链” 回复《《动画》》 快速推送&#xff1b; 拿到就能用轻松解决&#xff01;帮忙点个关注吧&#xff01;

【最后203篇系列】022 用Deepseek14b提取新闻事件

这算是之前一直想做的一件事&#xff0c;趁周末赶快做了。 业务意义&#xff1a;现实中有大量的舆情&#xff0c;这对我们的决策会有比较重要的作用 技术依赖&#xff1a; 1 模型基础能力2 消息队列3 异步获取消息4 时间序列库 1 模型基础能力 大模型发展到现在&#xff0…

电池电量检测方法介绍,开路电压法、库仑积分法、内阻法

开路电压法、库仑积分法、内阻法、卡尔曼滤波法、混合法 开路电压法是目前最简单的方法&#xff0c;根据电池的特性得知&#xff0c;在电池容量与开路电压之间存在一定的函数关系&#xff0c;当得知开路电压时&#xff0c;可以初步估算电池的剩余电量。该方法精度不高&#xf…

微调实战 - 使用 Unsloth 微调 QwQ 32B 4bit (单卡4090)

本文参考视频教程&#xff1a;赋范课堂 – 只需20G显存&#xff0c;QwQ-32B高效微调实战&#xff01;4大微调工具精讲&#xff01;知识灌注问答风格微调&#xff0c;DeepSeek R1类推理模型微调Cot数据集创建实战打造定制大模型&#xff01; https://www.bilibili.com/video/BV1…