• monaco-editor 简单使用


    ba9dd20230218174428131.png

    一. 文件调用示例

    1. 安装package包 官方文档

    1. "monaco-editor": "^0.28.1",
    2. "monaco-editor-webpack-plugin": "^4.2.0",

    Copy

    请注意安装包的版本号

    monaco-editor-webpack-pluginmonaco-editor
    7.*.*>= 0.31.0
    6.*.*0.30.*
    5.*.*0.29.*
    4.*.*0.25.*0.26.*0.27.*0.28.*
    3.*.*0.22.*0.23.*0.24.*
    2.*.*0.21.*
    1.9.*0.20.*
    1.8.*0.19.*
    1.7.*0.18.*

    2.配置vue.coinfig.js

    在vue.coinfig.js中增加如下配置:

    1. const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin');
    2. module.exports = {
    3. lintOnSave: false,
    4. configureWebpack: {
    5. plugins: [
    6. // 配置JS在线代码编辑器monaco-editor的辅助文件
    7. new MonacoWebpackPlugin(),
    8. ],
    9. },
    10. };

    Copy

    3. 调用示例

    1. import * as monaco from 'monaco-editor';
    2. export default {
    3. data() {
    4. return {
    5. monacoEditor: null, // 语言编辑器
    6. }
    7. },
    8. mounted(){
    9. this.init()
    10. },
    11. methods: {
    12. init(){
    13. if(this.$refs.codeContainer){
    14. // 初始化编辑器,确保dom已经渲染
    15. this.monacoEditor = monaco.editor.create(this.$refs.codeContainer, {
    16. value: '', // 编辑器初始显示文字
    17. language: 'json', // 语言
    18. automaticLayout: true, // 自动布局
    19. theme: 'vs', // 官方自带三种主题vs, hc-black, or vs-dark
    20. minimap: { // 关闭小地图
    21. enabled: false,
    22. },
    23. lineNumbers: 'off', // 隐藏控制行号
    24. });
    25. }
    26. }
    27. }
    28. }
    29. .coder-editor{
    30. width: 100%;
    31. height: 160px;
    32. border: 1px solid rgba(0, 0, 0, 0.08);
    33. }

    Copy

    二. 属性说明

    1. {
    2. value: '', // 编辑器初始显示文字
    3. language: 'javascript', // 语言javascript | json
    4. automaticLayout: true, // 自动布局
    5. theme: 'vs', // 官方自带三种主题vs, hc-black, or vs-dark
    6. foldingStrategy: 'indentation', // 代码可分小段折叠
    7. overviewRulerBorder: false, // 不要滚动条的边框
    8. lineNumbers: 'off', // 控制行号的出现on | off
    9. scrollbar: { // 滚动条设置
    10. verticalScrollbarSize: 4, // 竖滚动条
    11. horizontalScrollbarSize: 6, // 横滚动条
    12. },
    13. readOnly: false, // 是否只读 Defaults to false | true
    14. minimap: { // 关闭小地图
    15. enabled: false,
    16. },
    17. cursorStyle: 'line', // 光标样式
    18. automaticLayout: false, // 自动布局
    19. fontSize: 14, // 字体大小
    20. tabSize: 2, // tab缩进长度
    21. autoIndent: true, // 自动布局
    22. }

    Copy

    支持的语言类型

    在项目的node_modules/monaco-editor/min/vs/basic-languages目录下能看到支持的语言类型:

    三. 常用事件

    销毁编辑器

    this.monacoEditor.dispose();

    Copy

    实时获取编辑器的值

    1. this.monacoEditor.onDidChangeModelContent(() => {
    2. this.monacoEditor.getValue() // 获取编辑器中的语句
    3. })

    Copy

    设置编辑器的值

    this.monacoEditor.setValue(newValue)

    Copy

    其它事件

    1. editor.setValue('console.log("Hello world!");'); //设置值
    2. editor.getValue(); //获取值
    3. editor.getSelection(); //获取选中的行信息
    4. editor.getModel().getLineContent(1); //获取某一行的内容
    5. editor.getModel().getLinesContent(); //获取每一行的内容
    6. monaco.editor.setTheme('vs-dark'); //设置主题
    7. editor._configuration._rawOptions.language //获取编辑器当前语言(初始化值)
    8. editor.getModel().getLanguageId() //动态(已改变编辑器语言)
    9. //改变属性
    10. editor.updateOptions({
    11.   //关闭行号
    12.   lineNumbers: "off"
    13. });
    14. //内容改变事件
    15. editor.onDidChangeModelContent(function(e){
    16.   console.log(e);
    17.   console.log(editor.getValue());
    18. });
    19. //添加按键监听
    20. editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KEY_S, function () {
    21.   console.log('Ctrl + S 保存')
    22. })
    23. editor.trigger('a', 'editor.action.formatDocument') //触发:格式化文档,更多支持项:editor._actions
    24. //渲染代码得到HTML
    25. monaco.editor.colorize('console.log("Hello world!");', 'javascript').then(function (data) {
    26. console.log(data);
    27. });
    28. //渲染节点代码
    29. console.log("Hello world!");
    30. monaco.editor.colorizeElement(document.getElementById('code'));
  • 相关阅读:
    无法上网问题解决过程
    【无标题】
    TCP/IP 原理、实现方式与优缺点
    常见的积分:数理方程中常见的复杂积分
    java----js常用的api
    TVS 管选型与 ESD 防护设计
    uniapp 中app通过视频链接获取封面
    Chrome插件精选 — 屏幕录像插件
    MySql进阶篇---006:存储引擎,索引,SQL优化,视图、存储过程、变量、流程控制、游标、存储函数、触发器
    mysql的锁分类:表锁和行锁和页面锁
  • 原文地址:https://blog.csdn.net/luxiaol/article/details/134402791