vue+monato-editor代码编辑高亮,sql变化监听(组件化)-->优化具体语言引入

64 篇文章 3 订阅
49 篇文章 2 订阅

一、概念

Monaco Editor 是支持VS Code的代码编辑器 。描述代码编辑器功能的好页面在 这里。
它在 MIT 许可下获得许可,并支持 Edge、Chrome、Firefox、Safari 和 Opera。
移动浏览器或移动 Web 框架不支持 Monaco 编辑 器。
microsoft/monaco-editor代码仓库

二、使用步骤

  • 引用依赖

package.json
添加
"monaco-editor": "^0.21.2",
"monaco-editor-webpack-plugin": "^7.0.1",(简化使用)

  • 找到webpack的配置文件(别弄到babel的配置文件里了,启动会造成babel的报错),我们这的webpack是分的多
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin')
plugins: [
//HtmlWebpackPlugin别管,这里只是写例子,免得加这种数组不知道怎么加
        new HtmlWebpackPlugin({
            title: 'Message Bridge'
        }),
        new MonacoWebpackPlugin()
    ]
    

在这里插入图片描述

三、组件

在这里插入图片描述

<template>
  <div id="container" ></div> <!--宽高自行设定 -->
</template>

<script>
// 简化使用,不然得自己看需要什么,自己找在依赖中单个引用(这是个基本的总的)
import * as monaco from 'monaco-editor/esm/vs/editor/editor.main'
export default {
    props: {
      sql: {
        type: String,
        default () {
          return ''
        }
      }
    },
    data() {
        return {
            editor: null,
            mysql: ''
        }
    },
    watch: {
      sql(val) {
        console.log('sql');
        this.setValue(val)

      },
      mysql(val) {
        console.log('my', val);
        this.handleChange()
      }
    },
    mounted() {
      this.initEditor();
    },
    methods: {
        initEditor() {
             //  初始化编辑器,确保dom已经渲染
            this.editor = monaco.editor.create(document.getElementById('container'), {
                value: '', // 编辑器初始显示文字
                language: 'sql', // 语言支持自行查阅demo
                automaticLayout: true, // 自动布局
                theme: 'vs-dark' // 官方自带三种主题vs, hc-black, or vs-dark
            });
            this.setValue(this.sql)
            //monaco-editor原生内容变化事件监听设置
            this.editor.onDidChangeModelContent((event) => {
              const newValue = this.getValue();
              this.$emit('changeSql', newValue)
              })
            // document.getElementsByTagName('textarea')[0].value = this.sql
        },
        getValue() {
        //这个是plugin的方法,不然得项上面document那样自己从元素变化event的target下获取内容,麻烦
            return this.editor.getValue();
        },
        setValue(sql) {
        //这个是plugin的方法
            this.editor.setValue(sql);
        }
    }
}
</script>
//div无法直接高度为100%,得让所有父级设置高度
<style lang="scss" scoped>
#container {
  height: 97%;
}
</style>

四、优化

  • 找到我们引入的main
    在这里插入图片描述
  • 寻找我们需要的sql语言配置
    在这里插入图片描述
  • 重新引入,修改组件引入信息
import * as monaco from 'monaco-editor/esm/vs/editor/edcore.main';
// import * as monaco from 'monaco-editor/esm/vs/editor/editor.main'
// 具体需要引入具体语言
import 'monaco-editor/esm/vs/basic-languages/sql/sql.contribution'
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值