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

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

vue 使用monaco實現代碼高亮

瀏覽:24日期: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久久,三上悠亚国产精品一区二区三区
天堂√中文最新版在线| 99视频精品| 国产精品一区二区免费福利视频| 婷婷精品视频| 久久国产精品久久w女人spa| 日韩制服丝袜av| 青草综合视频| 成人一二三区| 日韩午夜在线| 国产欧美日韩在线观看视频| 欧美国产美女| 亚洲一区国产一区| 欧美亚洲自偷自偷| 黄色aa久久| 视频在线在亚洲| 国产精品传媒麻豆hd| 国产激情在线播放| 亚洲成人精选| 亚洲精品欧美| 激情久久99| 亚洲一区亚洲| 久久这里只有| 日韩午夜av在线| 欧美国产日韩电影| 国产在线成人| 97精品资源在线观看| 国产精品黑丝在线播放| 老牛国产精品一区的观看方式| 国产欧美精品久久| 欧美特黄一区| 久久精品一区| 噜噜噜躁狠狠躁狠狠精品视频 | 国产精品theporn| 久久久久国产精品一区二区| 综合一区在线| 风间由美中文字幕在线看视频国产欧美 | 久久精品国产久精国产| 欧美va亚洲va日韩∨a综合色| 日韩激情av在线| 欧美成人基地 | 日本免费新一区视频| 日韩久久精品| 欧美啪啪一区| 一区福利视频| 丰满少妇一区| 亚洲一二av| 色综合www| 麻豆免费精品视频| 最新亚洲国产| 国产精品88久久久久久| 欧美激情日韩| 中文字幕一区二区三区在线视频| 捆绑调教日本一区二区三区| 日本精品久久| 亚洲免费在线| 久久久精品日韩| 久久精品资源| 婷婷精品在线观看| 五月婷婷六月综合| 欧美精品高清| 国产va免费精品观看精品视频| 欧美日韩国产一区精品一区| 国产一区丝袜| 久久99蜜桃| 91亚洲精品视频在线观看 | 午夜国产一区二区| 成人亚洲欧美| 精品一区二区三区视频在线播放 | 免费在线看一区| 亚洲女同一区| 99久久激情| 在线亚洲人成| 国产视频一区二| 手机精品视频在线观看| 欧美成人综合| 中文字幕在线免费观看视频| 久久男人av| 国产精品一区二区av日韩在线 | 国产亚洲一级| 欧美1区2区3区| 欧洲一级精品| 日韩电影二区| 日韩免费在线| 麻豆视频在线观看免费网站黄| 精品亚洲a∨一区二区三区18| 天堂俺去俺来也www久久婷婷| 石原莉奈在线亚洲二区| 91精品国产福利在线观看麻豆| 欧美成人a交片免费看| 黄毛片在线观看| 成人精品动漫一区二区三区| 日韩精品免费一区二区夜夜嗨| av不卡免费看| 午夜精品亚洲| 玖玖玖国产精品| 亚洲一区有码| 亚洲精品字幕| 国产日韩欧美一区| 国产精品麻豆成人av电影艾秋 | 伊人精品一区| 国产99精品| 久久亚洲在线| 久久久久国产| 亚洲欧美视频| 日韩精品三级| 国产精品一区二区av日韩在线| 欧美激情视频一区二区三区免费 | 国产精品久久久亚洲一区| 国产精品**亚洲精品| 久久久久久色| 国产激情一区| av中文资源在线资源免费观看| 国产精品v日韩精品v欧美精品网站 | 热三久草你在线| 岛国av在线网站| 激情欧美日韩一区| 丝袜亚洲另类欧美| 国产精品夜夜夜| 捆绑调教日本一区二区三区| 影视先锋久久| 日韩区欧美区| 精品国产网站| 亚洲电影在线一区二区三区| 在线国产日韩| 久久精品五月| 精品国产一区二区三区噜噜噜| 日本激情一区| 视频一区二区国产| 欧美黄页在线免费观看| 亚洲午夜久久久久久尤物| 综合在线一区| 高清久久一区| 99国产精品私拍| 国产精品视频3p| 欧美日韩免费观看视频| 亚洲精品无播放器在线播放| 另类欧美日韩国产在线| 久久精品在线| 日韩欧美中文字幕电影| 日本高清不卡一区二区三区视频| 国产在线不卡| 久久国内精品视频| 久久精品欧美一区| 日本午夜精品久久久久| 日本欧美不卡| 久久精品97| 欧美亚洲在线日韩| 国产亚洲精品美女久久久久久久久久| 蜜臀国产一区| 欧美日韩亚洲一区二区三区在线| 亚洲91精品| 国产欧美三级| 中文国产一区| 国产美女高潮在线| 91精品美女| 国产一区二区三区自拍| 日本成人一区二区| 国产一区观看| 精品视频91| 日韩高清欧美激情| 亚洲国产日韩欧美在线| 精品中文字幕一区二区三区| 日韩在线观看一区二区| av中文资源在线资源免费观看| 日本精品久久| 伊人久久亚洲影院| 亚洲天堂资源| 久久影院资源站| 欧美日本一区| 爽爽淫人综合网网站| 久久精品欧美一区| 国产视频一区二| 免费在线看一区| 伊人久久大香线蕉av不卡| 欧美91在线| 日本午夜精品一区二区三区电影| 尤物精品在线| 久久伦理在线| 在线中文字幕播放| 麻豆免费精品视频| 欧美精品三级在线| 天堂av一区| 国产视频一区三区| 伊人精品一区| 电影亚洲精品噜噜在线观看| 麻豆免费精品视频| 一区二区不卡| 蜜臀久久久99精品久久久久久| 91久久国产| 免费黄色成人| 欧美日一区二区| 久久久久欧美精品| 久久三级视频| 欧美日韩一二三四| 久久久久久久久久久妇女| a国产在线视频| 国产白浆在线免费观看| 国产在线视频欧美一区| 国产不卡精品| 欧美日韩精品免费观看视完整 |