monaco-editor基本使用

前言

公司项目需要代码编辑器,多方参考之后用了monaco-editor。

一、monaco-editor是什么?

Monaco Editor 是微软开源的基于 VS Code 的代码编辑器,运行在浏览器环境中。

二、使用步骤

1.npm下载插件

//我下载的版本
npm i monaco-editor@0.28.1
npm i monaco-editor-webpack-plugin@4.2.0

2. vue.config.js配置

const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin')
module.exports = {
  chainWebpack: (config) => {
    config.plugin('monaco').use(new MonacoWebpackPlugin({
      languages: ['javascript', 'css', 'html', 'typescript', 'json','sql','java']
    }))
 }
}

3.封装为vue组件 

<template>
  <div class="myEditor">
    <div ref="monacocontainer" class="container" :id="id"></div>
  </div>
</template>
<script>
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api'
import 'monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution'
export default {
  props: {
    codes: {
      type: [String,Object],
      default: function () {
        return ''
      }
    },
//可填的几种语言需要在vue.config.js先配置
    language: {
      type: String,
      default: function () {
        return 'javascript'
      }
    },
    editorOptions: {
      type: Object,
      default: function () {
        return {
          foldingStrategy: 'indentation', // 代码可分小段折叠
          selectOnLineNumbers: true,
          roundedSelection: false,
          readOnly: false,        // 只读
          cursorStyle: 'line',        // 光标样式
          automaticLayout: false, // 自动布局
          glyphMargin: true,  // 字形边缘
          useTabStops: false,
          fontSize: 28,       // 字体大小
          tabSize: 2, // tab 缩进长度
          autoIndent: true, // 自动布局
          minimap: {
            enabled: false, // 不要小地图
          },
        }
      }
    },
    theme: {
      type: String,
      default: function () {
        return 'vs'
      }
    },
    id: {
      type: Number,
      default: function () {
        return 0
      }
    }
  },
  data() {
    return {
      // theme: 'vs',
      codesCopy: null // 内容备份
    }
  },
  mounted() {
    this.initEditor()
  },
  methods: {
    initEditor() {
      let editorOptions=this.editorOptions
      let base= {
        value: this.codesCopy || this.codes,
        language: this.language,
        theme: this.theme,
      }
      Object.assign(editorOptions, base)

      this.monacoEditor = monaco.editor.create(document.getElementById(this.id),editorOptions)
     
      this.$emit('mounted', this.monacoEditor)
     
      this.monacoEditor.onDidChangeModelContent((event) => {
        this.codesCopy = this.monacoEditor.getValue()
        
        this.$emit('codeChange', this.monacoEditor.getValue(), event)
      })
    
    }
  }
}
</script>
<style scoped>
.container {
  min-height: 330px;
  text-align: left;
}
</style>

4.页面引入 

<template>
     <MonacoEditor
          :codes="code"
          :editorOptions="Options"
          theme="vs"
          language="json"
          :key="randomkey"
          @mounted="onMounted"
          :id="randomkey"
        ></MonacoEditor>
</template>
//地址是封装为vue组件的页面地址
import MonacoEditor from "@/components/right/components/monacoEditor.vue";
export default {
  components: {
    MonacoEditor,
  },
data() {
    return {
     code:null,
     randomkey: 0,
      editor: null,
   Options: {
        selectOnLineNumbers: true,
        roundedSelection: false,
        readOnly: false,
        automaticLayout: true,
        glyphMargin: true,
        showFoldingControls: "always",
        formatOnPaste: true,
        formatOnType: true,
        folding: true,
      },
  }
},
methods: {
onMounted(val) {
      this.editor = val;
    },
}
}


//每次数据更新前,先将randomkey设置为随机数
this.randomkey = Math.floor(Math.random() * (10, 1000000012313));
//给代码编辑赋值,data为数据,如果需要是字符串则需要JSON.parse;若要设置为空则改为{}
this.code = JSON.stringify(data, null, "\t");

 


总结

以上就是今天要讲的内容,本文仅仅只是介绍了需求中monaco-editor的使用,而monaco-editor还有其它更加高效的功能,有需要的可以去官网看看。

Monaco Editor是一个支持VS Code的在线代码编辑器。在Monaco Editor中,可以通过配置readOnly属性为true来实现只读模式。例如,在初始化Monaco Editor时,可以将editorOptions中的readOnly属性设置为true,即可将编辑器设置为只读模式。 在代码中,可以通过以下方式来设置Monaco Editor的只读模式: 1. 首先,在初始化编辑器实例之前,需要将editorOptions中的readOnly属性设置为true,以确保编辑器处于只读模式。可以使用Object.assign()方法将defaultOpts与opts合并,并将readOnly属性设置为true。 2. 然后,使用monaco.editor.createDiffEditor()创建一个差异编辑器的实例,将只读模式的编辑器实例赋值给monacoDiffInstance。 3. 最后,使用monacoDiffInstance.setModel()方法设置编辑器的模型,其中original参数为以前的值的模型,modified参数为新的值的模型。 通过以上步骤,可以将Monaco Editor设置为只读模式。需要注意的是,在初始化之后,如果需要修改readOnly的配置,需要重新执行初始化方法this.init()。 在使用Monaco Editor之前,需要先安装依赖插件。可以使用npm或其他包管理工具来安装monaco-editormonaco-editor-nls、monaco-editor-webpack-plugin和monaco-editor-esm-webpack-plugin等插件。可以使用命令npm install来安装这些依赖插件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Monaco-EditorVue使用(实现代码编辑与diff代码比较)](https://blog.csdn.net/weixin_39085822/article/details/115007782)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [vue使用 monaco editor 汉化 右键菜单汉化](https://blog.csdn.net/m0_37986789/article/details/121135519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值