编辑器组件monaco

2023-11-01

1、配置代码编辑器子组件monaco.js

<!-- 代码编辑器组件 -->
<template>
    <!-- 使用monaco-editor之前,需要先准备一个容器来挂载monaco-editor实例 -->
    <div ref="editerWrap" class="code-editer-wrap"></div>
</template>

<script setup lang="ts">
//依赖挂载
import monaco from './dependencies';
import { computed, onMounted, ref, watch } from 'vue';

//编辑器实例值
let codeEditer: any = null;
//拿到编辑器实例dom
const editerWrap = ref(null);

//拿到父传子的属性
const props = defineProps({
    modelValue: {
        type: String,
        default: '',
    },
    config: {
        type: Object,
        default: () => ({
            value: ``,
            fontSize: 14,
            readOnly: false,
            language: 'javascript',
        }),
    }
})
const emits = defineEmits(['change', 'update:modelValue', 'blur', 'focus']);

//编辑器实例配置
const codeEditerConfig = computed(() =>
    // Object.assign(target, ...sources),将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
    Object.assign({
        value: props.modelValue,//编辑器的值
        fontsize: 14,
        readOnly:true,
        language: 'json',//语言
        automaticLayout: true,
        scrollBeyondLastLine: false,
        overviewRulerBorder: false,
    },props.config )
           
);
//初始化编辑器
const initCodeEditer = () => {
    // 使用monaco.editor.create方法创建monaco.editor实例,第一个参数接收一个dom元素实例
    codeEditer =  monaco.editor.create(editerWrap.value, codeEditerConfig.value)
};

//内容变化监听
const initCodeChange = () => {
    codeEditer.onDidChangeModelContent(() => {
        //获取内容
        const value = getCodeEditerValue();
        emits('update:modelValue', value);
        emits('change',value);
    })
}
//获取内容
const getCodeEditerValue = () => codeEditer.getValue();

//焦点变化监听
const blurAndFocusMoniter = () => {
    codeEditer.onDidBlurEditorText((e) => {
        emits('blur', e);
    });
    codeEditer.onDidFocusEditorText((e) => {
        emits('focus', e);
    })

}

//设置内容
const setCodeEditerValue = (val) => codeEditer.setValue(val);
//格式化代码
const codeEditerFormat = () => codeEditer.trigger('anything', 'editor.action.formatDocument')
// 属性或方法必须暴露出去, 父组件才能用
defineExpose({ codeEditerFormat,setCodeEditerValue });

onMounted(() => {
    initCodeEditer();//初始化编辑器
    initCodeChange(); //内容变化监听
    blurAndFocusMoniter(); //焦点变化监听


})


//更新配置
const updateCodeEditerConfig = () => {
    codeEditer.updateOptions(codeEditerConfig.value);
    console.log(codeEditerConfig.value);
};

//双向绑定,更新编辑器内容
watch(
    () => props.modelValue,
    (val) => {
        if (val !== getCodeEditerValue())
           setCodeEditerValue(val);
    }
);

//监听配置修改
watch(
    () => props.config,
    () => {
        if(codeEditer) updateCodeEditerConfig();
    },{immediate: true, deep: true}
);

//监听语言配置变更
watch(
    () => props.config.language,
    (val) => {
        if(codeEditer) monaco.editor.setModelLanguage(codeEditer.getModel(), val);
    },{ immediate: true, deep: true}
);
</script>

2、在父组件中使用:

<CodeEditer ref="monaco" v-model="codeEditerValue" class="code-editer-box" :config="codeEditerConfig"
            style="height:80vh;width:600px"></CodeEditer>
import CodeEditer from '@/components/monaco/gjManacoEditor.vue';

const monaco = ref();


const state = reactive({
    codeEditerValue: "",
    codeEditerConfig: {
        fontSize: 14,
        language: 'json',
        theme: 'vs',
    },
});

const {
    codeEditerValue,
    codeEditerConfig,
} = toRefs(state);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编辑器组件monaco 的相关文章

随机推荐

  • Linux系统下解压当前目录下的所有.zip文件到指定目录

    可以使用以下的命令在Linux系统下解压当前目录下的所有 zip文件到指定目录 find type f name zip exec unzip o d path to destination 解释 find type f name zip
  • matlab读写xlsx文件

    做数据分析时经常需要将分析的结果写入文件保存 这里就说明一下matlab读写xlsx文件的方法 调用函数如下 写文件 files 文件路径 A 数据 sheet xlsx工作表 x1Range 工作表的单元格 files strcat pw
  • [技术讨论]PCB晶振layout需要注意事项

    晶振是单片机的心脏 所以晶振的重要性不言而喻 那么在PCB layout的时候 我们对晶振要有哪些注意事项呢 一 晶振的两个重要参数 晶振的频偏是指晶振输出的频率与其额定频率之间的差异 通常以ppm 百万分之一 为单位表示 频偏可能会受到晶
  • 怎么在云服务器上跑深度学习项目,深度学习训练

    MMCV 是一个面向计算机视觉的基础库 它支持了很多开源项目 注意事项 RTX 3000 系列显卡在 PyTorch 1 8 1 For CUDA 11 1 上 MMCV 目前工作不正常 使用此系列显卡时 请选择 PyTorch 1 7 1
  • C语言循环数组解决数学问题,通过C语言数组解决一些简单的递推数学问题

    通过C语言数组解决一些简单的递推数学问题 c语言是一种十分适合解决数学问题的编程语言 其中数组对于解决递推问题有十分优秀的作用 数组 数组就是变量的集合 是一种指定义变量的方法 一维数组 定义 类型 数组 数量 里的整数表示变量的数量 in
  • 【猿人学WEB题目专解】猿人学第2题

    据说 看我文章时 关注 点赞 收藏 的 帅哥美女们 心情都会不自觉的好起来 前言 作者简介 大家好我是 user from future 意思是 来自未来的用户 寓意着未来的自己一定很棒 个人主页 点我直达 在这里肯定能找到你想要的 专栏介
  • 【计算机视觉

    文章目录 一 ZeroWaste 二 Aircraft Context Dataset 三 BdSLImset Bangladeshi Sign Language Image Dataset 四 COCO Tasks 五 Deep PCB
  • fragment中嵌套viewpager,vierpager中有多个fragment,不显示 .

    http blog csdn net shaoyizhe2006 article details 27352349
  • PID 算法 (温控为例子)

    一 位式控制 位式控制算法输出信号一般只有高低两种状态 算法输出信号out的依据 PV lt SP gt H PV gt SP gt L 对于系统惯性 会导致系统震荡 PID算法 基于位式控制 做了很多优化 SP Set Point PV
  • 《数学建模实战攻略:常用数学理论与方法Matlab》

    一 简介 在数学建模过程中 选择合适的数学理论和方法对于解决问题至关重要 在本篇博客中 我们将介绍数学建模中经常用到的一些数学理论和方法 包括线性代数 微积分 概率论与统计以及优化方法 此外 我们将通过一个简单的示例来展示如何使用MATLA
  • 【纯干货】神奇的Ctrl键,Linux运维常用快捷键!

    Ctrl 可以带来什么意想不到的效果呢 是否所有的Linux运维常用快捷键你都已经掌握了呢 小编发现不少小伙伴们在学习以及Linux运维工作中 操作命令行还在用很土很没效率的方法 例如频繁用方向键移动命令行光标 频繁敲重复的命令等 为了解决
  • HA主备路由模式的原理

    HA是High Availability缩写 即高可用性 可防止网络中由于单个防火墙的设备故障或网络故障导致网络中断 保证网络服务的连续性和安全强度 目前 ha功能已经是防火墙内一个重要组成部分 主备模式 Active standby 在一
  • cerr与cout的区别

    概念 std cerr是ISO C 标准错误输出流 对应于ISO C标准库的stderr 与std cout不同 ISO C 要求当cerr被初始化后 cerr flags unitbuf非零 保证流在每次输出操作后被刷新 且cerr ti
  • Sublime Text的安装与配置记录

    Sublime Text作为一款优质的Code编辑器 已更新至第4个版本 本文记录关于Sublime Text 4 版本4126 的安装 汉化 以及常用配置方法 安装 访问官网下载安装包 https www sublimetext com
  • 如何注册快手引流号?快手引流账号应该注意什么?

    快手短视频的影响力越来越大 用户也是越来越多 一个流量聚焦的平台 通过用户分享自制的短视zhi频形式获取了大量粉丝 而且不屏蔽任何引流信息 可以说是非常开放 自由 快手在短时间内就拥有大量的用户数不得不说它的推广很到位 那么快手账号应该如何
  • 【题解】游戏 (2019.08.01纪中【NOIP提高组】模拟 B 组T1) DP 博弈论

    题目来源 中山纪念中学 题目描述 Alice和Bob在玩一个游戏 游戏是在一个N N的矩阵上进行的 每个格子上都有 一个正整数 当轮到Alice Bob时 他 她可以选择最后一列或最后一行 并将其删除 但 必须保证选择的这一行或这一列所有数
  • 使用Docker部署Node.js中的Vue项目

    1 准备工作 使用服务器 阿里云 服务器系统 CentOS 7 项目配置 准备好一个项目 该项目下有以下文件 对 package json 文件进行修改 设置项目启动的端口号和使用的ip 注 在修改package json文件中的host为
  • 图解 Java 垃圾回收机制,写得非常好!

    什么是自动垃圾回收 自动垃圾回收是一种在堆内存中找出哪些对象在被使用 还有哪些对象没被使用 并且将后者删掉的机制 所谓使用中的对象 已引用对象 指的是程序中有指针指向的对象 而未使用中的对象 未引用对象 则没有被任何指针给指向 因此占用的内
  • UnsatisfiedDependencyException: Error creating bean with name XXXController'

    在springboot中遇到了UnsatisfiedDependencyException Error creating bean with name XXXController 的问题 代码如下 controller public cla
  • 编辑器组件monaco

    1 配置代码编辑器子组件monaco js