meta2d中,自定义消息解析,用vue3+vite+monaco实现代码编辑器

350 阅读1分钟

前言:在meta2d可视化编辑器中,对于从mqtt获取的消息,需要自定义解析函数,但我并不想写在代码里,而是想把函数体部分的代码放到前端编辑器中实现。对此,需要用到monaco实现代码编辑器

1. 安装依赖

npm install monaco-editor

2.安装vite插件

npm install --save-dev vite-plugin-monaco-editor

3.配置vite.config.js文件

import { defineConfig } from 'vite';
import monacoEditorPlugin from 'vite-plugin-monaco-editor';
 
export default defineConfig({
  plugins: [monacoEditorPlugin()],
});

4.编辑器组件

<template>
  <div>
    <div id="editorContainer" ref="editorContainer" style="min-height: 200px;width: 100%"></div>
  </div>
</template>

<script setup>
import * as monaco from 'monaco-editor';  // 全部导入
import { ref, onMounted } from 'vue';
const editor = ref(null);
// 定义从父组件接收的属性
const props = defineProps({
  // option: Object
  // 代码内容
  value: {
    type:String,
    default: ''
  },
  // 代码语言
  language:{
    type: String,
    default: 'javascript'
  }
})

onMounted(() => {
  editor.value = monaco.editor.create(document.getElementById('editorContainer'), {
    value:  'return true;',
    language: 'javascript',
    minimap: {
      enabled: true,
    },
    colorDecorators: true,   //颜色装饰器
    readOnly: false,    //是否开启已读功能
    theme: "vs-dark",   //主题
    automaticLayout: true,//自适应大小
    insertSpaces: true,
  });

  // 监听编辑器内容变化
  editor.value.onDidChangeModelContent(() => {
    // 触发父组件的 change 事件,通知编辑器内容变化
    // props.onChange(getVal);
  });
});
const getVal = () => {
  return toRaw(editor.value).getValue(); //获取编辑器中的文本
}
</script>

5.父组件(弹窗弹出编辑器)

<el-dialog v-model="showEditor" title="JavaScript">
  <CodeEditor @change="handleEditorChange"/>
  <template #footer>
    <span class="dialog-footer">
      <el-button @click="showEditor = false">Cancel</el-button>
      <el-button type="primary" @click="showEditor = false"
      >Confirm</el-button
      >
    </span>
  </template>
</el-dialog>

PS:常见问题

  1. blog.csdn.net/hanying1220…
  2. blog.csdn.net/gh313287387…