日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue 使用monaco實現代碼高亮

瀏覽:30日期:2022-10-03 15:05:09

使用的是vue語言,用element的組件,要做一個在線編輯代碼,要求輸入代碼內容,可以進行高亮展示,可以切換各不同語言,而且支持關鍵字補全,還要有一個各不同版本間的代碼左右比較,這就是需求。

至于為什么選中monaco,請查看 vue(element)中代碼高亮插件全面對比

好了,現在正式開工吧!

首先需要下載monaco-editor組件,monaco-editor-webpack-plugin組件

npm install monaco-editornpm install monaco-editor-webpack-plugin

當然啦,npm下載很是緩慢,換個國內鏡像,淘寶的吧。果然,速度就嗖嗖的起來。

npm install -g cnpm --registry=https://registry.npm.taobao.orgcnpm installcnpm install monaco-editorcnpm install monaco-editor-webpack-plugin

可在node_modules下看到其目錄結構

vue 使用monaco實現代碼高亮

核心代碼如下所示

首先寫個組件,供其他頁面引入調用,

CodeEditor.vue

<template> <div ref='container'></div></template><script> import * as monaco from 'monaco-editor'; let sqlStr = 'ADD EXCEPT PERCENT ALL EXEC PLAN ALTER EXECUTE PRECISION AND EXISTS PRIMARY ANY EXIT PRINT AS FETCH PROC ASC FILE PROCEDURE AUTHORIZATION FILLFACTOR PUBLIC BACKUP FOR RAISERROR BEGIN FOREIGN READ BETWEEN FREETEXT READTEXT BREAK FREETEXTTABLE RECONFIGURE BROWSE FROM REFERENCES BULK FULL REPLICATION BY FUNCTION RESTORE CASCADE GOTO RESTRICT CASE GRANT RETURN CHECK GROUP REVOKE CHECKPOINT HAVING RIGHT CLOSE HOLDLOCK ROLLBACK CLUSTERED IDENTITY ROWCOUNT COALESCE IDENTITY_INSERT ROWGUIDCOL COLLATE IDENTITYCOL RULE COLUMN IF SAVE COMMIT IN SCHEMA COMPUTE INDEX SELECT CONSTRAINT INNER SESSION_USER CONTAINS INSERT SET CONTAINSTABLE INTERSECT SETUSER CONTINUE INTO SHUTDOWN CONVERT IS SOME CREATE JOIN STATISTICS CROSS KEY SYSTEM_USER CURRENT KILL TABLE CURRENT_DATE LEFT TEXTSIZE CURRENT_TIME LIKE THEN CURRENT_TIMESTAMP LINENO TO CURRENT_USER LOAD TOP CURSOR NATIONAL TRAN DATABASE NOCHECK TRANSACTION DBCC NONCLUSTERED TRIGGER DEALLOCATE NOT TRUNCATE DECLARE NULL TSEQUAL DEFAULT NULLIF UNION DELETE OF UNIQUE DENY OFF UPDATE DESC OFFSETS UPDATETEXT DISK ON USE DISTINCT OPEN USER DISTRIBUTED OPENDATASOURCE VALUES DOUBLE OPENQUERY VARYING DROP OPENROWSET VIEW DUMMY OPENXML WAITFOR DUMP OPTION WHEN ELSE OR WHERE END ORDER WHILE ERRLVL OUTER WITH ESCAPE OVER WRITETEXT'; export default { name: 'codeEditor', props: { options: { type: Object, default() { return { language: 'java', // shell、sql、python readOnly: true // 不能編輯 }; } }, value: { type: String, default: '' } }, data() { return { monacoInstance: null, provider: null, hints: [ 'SELECT', 'INSERT', 'DELETE', 'UPDATE', 'CREATE TABLE', 'DROP TABLE', 'ALTER TABLE', 'CREATE VIEW', 'DROP VIEW', 'CREATE INDEX', 'DROP INDEX', 'CREATE PROCEDURE', 'DROP PROCEDURE', 'CREATE TRIGGER', 'DROP TRIGGER', 'CREATE SCHEMA', 'DROP SCHEMA', 'CREATE DOMAIN', 'ALTER DOMAIN', 'DROP DOMAIN', 'GRANT', 'DENY', 'REVOKE', 'COMMIT', 'ROLLBACK', 'SET TRANSACTION', 'DECLARE', 'EXPLAN', 'OPEN', 'FETCH', 'CLOSE', 'PREPARE', 'EXECUTE', 'DESCRIBE', 'FORM', 'ORDER BY' ] }; }, created() { this.initHints(); }, mounted() { this.init(); }, beforeDestroy() { this.dispose(); }, methods: { dispose() { if (this.monacoInstance) { if (this.monacoInstance.getModel()) { this.monacoInstance.getModel().dispose(); } this.monacoInstance.dispose(); this.monacoInstance = null; if(this.provider){ this.provider.dispose(); this.provider = null } } }, initHints() { let sqlArr = sqlStr.split(' '); this.hints = Array.from(new Set([...this.hints, ...sqlArr])).sort(); }, init() { let that = this; this.dispose(); let createCompleters = textUntilPosition => { //過濾特殊字符 let _textUntilPosition = textUntilPosition .replace(/[*[]@$()]/g, '') .replace(/(s+|.)/g, ' '); //切割成數組 let arr = _textUntilPosition.split(' '); //取當前輸入值 let activeStr = arr[arr.length - 1]; //獲得輸入值的長度 let len = activeStr.length; //獲得編輯區域內已經存在的內容 let rexp = new RegExp(’([^w]|^)’+activeStr+’w*’, 'gim'); let match = that.value.match(rexp); let _hints = !match ? [] : match.map(ele => { let rexp = new RegExp(activeStr, 'gim'); let search = ele.search(rexp); return ele.substr(search) }) //查找匹配當前輸入值的元素 let hints = Array.from(new Set([...that.hints, ..._hints])).sort().filter(ele => { let rexp = new RegExp(ele.substr(0, len), 'gim'); return match && match.length === 1 && ele === activeStr || ele.length === 1 ? false : activeStr.match(rexp); }); //添加內容提示 let res = hints.map(ele => { return { label: ele, kind: that.hints.indexOf(ele) > -1 ? monaco.languages.CompletionItemKind.Keyword : monaco.languages.CompletionItemKind.Text, documentation: ele, insertText: ele }; }); return res; }; this.provider = monaco.languages.registerCompletionItemProvider('sql', { provideCompletionItems(model, position) { var textUntilPosition = model.getValueInRange({ startLineNumber: position.lineNumber, startColumn: 1, endLineNumber: position.lineNumber, endColumn: position.column }); var suggestions = createCompleters(textUntilPosition); return { suggestions: suggestions }; return createCompleters(textUntilPosition); } }); // 初始化編輯器實例 this.monacoInstance = monaco.editor.create(this.$refs['container'], { value: this.value, theme: 'vs-dark', autoIndex: true, ...this.options }); // 監聽編輯器content變化事件 this.monacoInstance.onDidChangeModelContent(() => { this.$emit('contentChange', this.monacoInstance.getValue()); }); } } };</script><style lang='scss' scope> .code-container { width: 100%; height: 100%; overflow: hidden; border: 1px solid #eaeaea; .monaco-editor .scroll-decoration { box-shadow: none; } }</style>

引入頁面,供本頁面使用

index.vue

<template> <div class='container'> <code-editor :options='options' :value='content' @contentChange='contentChange' ></code-editor> </div></template><script> import CodeEditor from '@/components/CodeEditor'; export default { name: 'SQLEditor', components: { CodeEditor }, data() { return { content: '', options: { language: 'sql', theme: ’vs’, readOnly: false } }; }, created() {}, methods: { // 綁定編輯器value值的變化 contentChange(val) { this.content = val; } } };</script><style scoped lang='scss'> .container { text-align: left; padding: 10px; }</style>

效果如下所示

代碼自動提示效果,如下所示

vue 使用monaco實現代碼高亮

代碼高亮效果,代碼段折疊效果,右側預覽效果如下所示

vue 使用monaco實現代碼高亮

以上就是vue 使用monaco實現代碼高亮的詳細內容,更多關于vue 代碼高亮的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩夜夜| 国产欧美91| 国产精品一区高清| 狠狠干成人综合网| 首页国产精品| 老司机精品在线| 性色av一区二区怡红| 亚洲成人国产| 蜜臀久久精品| 韩国三级一区| 国产精品久久久久蜜臀| 美女久久久精品| 欧美日韩一区二区三区不卡视频| 免费在线观看视频一区| 欧美aa在线观看| 毛片在线网站| 亚洲精品在线影院| 欧美三级网址| 精品日韩视频| 欧美精品高清| 久久在线免费| 五月天久久网站| 99久久亚洲精品蜜臀| 亚洲午夜一级| 久久国产主播| 激情综合网站| 丝袜美腿高跟呻吟高潮一区| 视频一区二区三区入口| 欧美精品一线| 久久美女精品| 中国字幕a在线看韩国电影| 成人福利视频| 99久久精品费精品国产| 伊人影院久久| 亚洲精品裸体| 国产精品扒开腿做爽爽爽软件| 国产精品啊啊啊| 精品国产a一区二区三区v免费| 91麻豆国产自产在线观看亚洲| 久久国内精品自在自线400部| 国产精品毛片视频| 伊人久久国产| 国产精品美女久久久| 欧美大黑bbbbbbbbb在线| 欧美肉体xxxx裸体137大胆| 午夜久久免费观看| 日韩精品91亚洲二区在线观看| 中文字幕亚洲影视| 国产麻豆一区二区三区精品视频| 久久亚洲精精品中文字幕| 日韩毛片视频| 群体交乱之放荡娇妻一区二区| 亚洲欧美综合| 日韩高清电影免费| 精品美女久久| 三级精品视频| 亚洲精品乱码日韩| 国产成年精品| 在线一区免费观看| 亚洲综合福利| 成人黄色av| 视频在线观看91| 国产精品久久久久久久久免费高清 | 青草综合视频| 亚洲主播在线| 久久精品二区三区| 手机在线电影一区| 久久久久伊人| 久久只有精品| 国产日韩一区| 7m精品国产导航在线| 免费在线看一区| 国产视频一区欧美| 激情欧美国产欧美| 肉色欧美久久久久久久免费看| 国产亚洲精品美女久久| 日本中文字幕一区二区视频| 日韩视频免费| 久久理论电影| 久久国产亚洲精品| 免费福利视频一区二区三区| 精品三级国产| 久久久国产精品入口麻豆| 国产精品白丝一区二区三区| 欧美亚洲tv| 日韩精品欧美精品| 日韩欧美激情电影| 欧美精品国产一区| 国产精品hd| 国产精品二区不卡| 日韩深夜视频| 欧美三区四区| 亚洲一级二级| 日韩一区二区久久| 日韩精品一二区| 亚洲精品人人| 国产精品男女| 高清一区二区三区av| 成人国产精品一区二区免费麻豆| 国产免费播放一区二区| 国产极品模特精品一二| 国产一区一一区高清不卡| 国产中文欧美日韩在线| 88xx成人免费观看视频库| 日韩电影免费在线观看| 久久久久亚洲| 亚洲少妇自拍| 日本天堂一区| 国产成人精品亚洲线观看| 欧洲在线一区| 久久亚洲电影| 欧美欧美黄在线二区| 精品国产精品国产偷麻豆| 日韩高清中文字幕一区二区| 久久久久久久久久久妇女 | 日韩一区二区三区在线免费观看| 久久久久美女| 一区二区国产在线| 久久a爱视频| 成人看片网站| 亚洲一二av| 国内在线观看一区二区三区| 亚洲午夜精品久久久久久app| 蜜桃久久精品一区二区| 国产精品久久久久久久久免费高清| 国产一区二区三区四区大秀| 激情婷婷亚洲| 青草av.久久免费一区| 美女视频黄久久| 91九色精品国产一区二区| 亚州欧美在线| 亚洲成人不卡| 日韩久久99| 电影天堂国产精品| 少妇精品久久久一区二区| 97人人精品| 亚洲精品三级| 久久影院午夜精品| 亚洲精品影院在线观看| 日韩av二区| 综合精品一区| 国产一区二区三区不卡视频网站| 1000部精品久久久久久久久| 中文字幕日韩亚洲| 麻豆91小视频| 欧美日韩视频| 精品入口麻豆88视频| 欧美在线影院| 成人午夜网址| 日韩三级一区| 欧美美女一区| 精品伊人久久| 亚洲免费成人av在线| 夜鲁夜鲁夜鲁视频在线播放| 日韩不卡一区二区三区| 免费精品国产的网站免费观看| 欧美日韩91| 在线一区电影| 高清在线一区| 欧美日韩一区二区三区四区在线观看| 久久国产电影| 精品午夜av| 日韩在线网址| 亚洲精品在线观看91| 国产一区二区精品久| 午夜久久av| 国产农村妇女精品一区二区| 久久影院一区二区三区| 日韩精品中文字幕一区二区| 婷婷亚洲五月色综合| 蜜臀国产一区| 老司机免费视频一区二区三区| 石原莉奈一区二区三区在线观看| www.51av欧美视频| 国产精品永久| 日本一区二区三区视频在线看| 亚洲精品中文字幕乱码| 亚洲永久av| 福利精品在线| 麻豆久久久久久久| 青青青国产精品| 一本一道久久a久久| 一区免费在线| 不卡在线一区| 国产韩日影视精品| 久久久水蜜桃av免费网站| 成人台湾亚洲精品一区二区| 国产精品久久久久久久久久齐齐 | 国产理论在线| 精品美女视频 | 日韩精品一二三四| 欧美日韩国产一区精品一区| 91一区二区| 国语精品一区| 国产一区福利| 日本激情一区| 中文字幕人成乱码在线观看 | 国产国产精品| 黄色日韩在线| 亚洲欧美久久久|