IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> monaco-editor基本使用以及monaco-editor封装成vue组件 -> 正文阅读

[JavaScript知识库]monaco-editor基本使用以及monaco-editor封装成vue组件

一、monaco-editor基本使用

以vue2项目为例

安装依赖

npm i monaco-editor
npm i monaco-editor-webpack-plugin

配置vue.config.js

const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin')
module.exports = {
  configureWebpack: {
      plugins: [
          new MonacoWebpackPlugin()
      ]
  }
}

使用monaco-editor前,需要先准备一个容器来挂载monaco-editor实例

<div id="monacoEditorContainer" style="height:300px;"></div>

创建monaco-editor实例
使用monaco.editor.create方法创建monaco-editor实例,create方法的第一个参数接收一个dom元素,第二个参数可选,接收一个IStandaloneEditorConstructionOptions配置对象
在这里插入图片描述
关于IStandaloneEditorConstructionOptions的信息可查阅 monaco-editor api文档

例如:

<script>
import * as monaco from 'monaco-editor'

export default {
  data() {
    return {
      standaloneEditorConstructionOptions: {
        value: '', // 编辑器的值
        language: 'javascript', //语言
        theme: 'vs-dark', // 编辑器主题:vs, hc-black, or vs-dark
        autoIndent: true, // 自动缩进
        readOnly: false, // 是否只读
      }
    }
  },
  mounted() {
    this.createMonacoEditor()
  },
  methods: {
    createMonacoEditor() {
      const container = document.getElementById('monacoEditorContainer')
      this.monacoEditor = monaco.editor.create(container, this.standaloneEditorConstructionOptions)
    }
  }
}
</script>

完整代码

<template>
  <div>
    <div id="monacoEditorContainer" style="height:300px;"></div>
  </div>
</template>

<script>
import * as monaco from 'monaco-editor'

export default {
  data() {
    return {
      standaloneEditorConstructionOptions: {
        value: '', // 编辑器的值
        language: 'javascript', //语言
        theme: 'vs-dark', // 编辑器主题:vs, hc-black, or vs-dark
        autoIndent: true, // 自动缩进
        readOnly: false, // 是否只读
      }
    }
  },
  mounted() {
    this.createMonacoEditor()
  },
  methods: {
    createMonacoEditor() {
      const container = document.getElementById('monacoEditorContainer')
      this.monacoEditor = monaco.editor.create(container, this.standaloneEditorConstructionOptions)
    }
  }
}
</script>

<style scoped lang="less">
</style>

二、monaco-editor封装成vue组件

my-monaco-editor.vue

<!--
my-monaco-editor:
基于monaco-editor封装的vue组件,支持尺寸、配置的响应式
-->

<template>
  <div :style="{height, width}" class="my-monaco-editor"></div>
</template>

<script>
import * as monaco from 'monaco-editor'

export default {
  props: {
    options: {
      type: Object,
      default: () => {
      }
    },
    height: {
      type: String,
      default: '300px'
    },
    width: {
      type: String,
      default: '100%'
    },
    code: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      defaultOptions: {
        value: this.code, // 编辑器的值
        language: 'javascript', //语言
        theme: 'vs-dark', // 编辑器主题:vs, hc-black, or vs-dark
        autoIndent: true, // 自动缩进
        readOnly: false, // 是否只读
      }
    }
  },
  computed: {
    standaloneEditorConstructionOptions() {
      return Object.assign(this.defaultOptions, this.options)
    }
  },
  methods: {
    createMonacoEditor() {
      this.monacoEditor = monaco.editor.create(this.$el, this.standaloneEditorConstructionOptions)
      this.monacoEditor.onDidChangeModelContent(event => {
        this.$emit('update:code', this.monacoEditor.getValue())
      })
    },
    reSize() {
      this.$nextTick(() => {
        this.monacoEditor.layout()
      })
    }
  },
  mounted() {
    this.createMonacoEditor()
  },
  watch: {
    height() {
      this.reSize()
    },
    width() {
      this.reSize()
    },
    options: {
      handler() {
        this.$nextTick(() => {
          this.monacoEditor.updateOptions(this.standaloneEditorConstructionOptions)
        })
      },
      deep: true
    }
  }
}
</script>

<style lang="less" scoped>
</style>

使用my-monaco-editor

<template>
  <div class="monaco-editor-view">
    <!--演示尺寸响应式-->
    <el-form>
      <el-form-item label="height">
        <el-input v-model="inputHeight" @change="val => height = val"></el-input>
      </el-form-item>
      <el-form-item label="width">
        <el-input v-model="inputWidth" @change="val => width = val"></el-input>
      </el-form-item>
    </el-form>

    <my-monaco-editor :code.sync="code" :height="height" :options="options" :width="width"></my-monaco-editor>
  </div>
</template>

<script>
import MyMonacoEditor from '@/components/my-monaco-editor'

export default {
  components: {
    MyMonacoEditor
  },
  data() {
    return {
      code: 'ok',
      inputHeight: '',
      inputWidth: '',
      height: '100px',
      width: '500px',
      options: {}
    }
  },
  created() {
    this.inputHeight = this.height
    this.inputWidth = this.width

    setTimeout(() => {
      //演示配置响应式
      this.changeOptions()
    }, 2000)
  },
  methods: {
    changeOptions() {
      this.$set(this.options, 'fontSize', 40)
    }
  }
}
</script>

<style lang="less" scoped>
</style>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:06:34  更:2022-10-22 21:11:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 18:28:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码