[轉]vue-codemirror 代碼編輯器

?

codemirror 是一個非常強大的代碼編輯器插件,但官方并沒有提供 vue 的支持版本,不過跟 vue 集成的步驟并不復雜,以下是具體實現

?

更多精彩

?

  • 更多技術博客,請移步 IT人才終生實訓與職業進階平臺 - 實訓在線

?

相關網址

?

  1. Vue 官方插件庫推薦的集成實現
    • 這個實現做的比較全面,但不支持動態語法高亮的切換
  2. codemirror 支持的語言類型
  3. codemirror 官網

?

實現效果

?

?

具體實現

?

  1. 首先需要運行 npm i codemirror --save 在項目中安裝對應組件

?

<template><div class="in-coder-panel"><textarea ref="textarea"></textarea><el-select class="code-mode-select" v-model="mode"@change="changeMode"><el-option v-for="mode in modes":key="mode.value" :label="mode.label" :value="mode.value"></el-option></el-select></div>
</template><script type="text/ecmascript-6">// 引入全局實例import _CodeMirror from 'codemirror'// 核心樣式import 'codemirror/lib/codemirror.css'// 引入主題后還需要在 options 中指定主題才會生效import 'codemirror/theme/cobalt.css'// 需要引入具體的語法高亮庫才會有對應的語法高亮效果// codemirror 官方其實支持通過 /addon/mode/loadmode.js 和 /mode/meta.js 來實現動態加載對應語法高亮庫// 但 vue 貌似沒有無法在實例初始化后再動態加載對應 JS ,所以此處才把對應的 JS 提前引入import 'codemirror/mode/javascript/javascript.js'import 'codemirror/mode/css/css.js'import 'codemirror/mode/xml/xml.js'import 'codemirror/mode/clike/clike.js'import 'codemirror/mode/markdown/markdown.js'import 'codemirror/mode/python/python.js'import 'codemirror/mode/r/r.js'import 'codemirror/mode/shell/shell.js'import 'codemirror/mode/sql/sql.js'import 'codemirror/mode/swift/swift.js'import 'codemirror/mode/vue/vue.js'// 嘗試獲取全局實例const CodeMirror = window.CodeMirror || _CodeMirrorexport default {name: 'in-coder',props: {// 外部傳入的內容,用于實現雙向綁定value: String,// 外部傳入的語法類型language: {type: String,default: null}},data () {return {// 內部真實的內容code: '',// 默認的語法類型mode: 'javascript',// 編輯器實例coder: null,// 默認配置options: {// 縮進格式tabSize: 2,// 主題,對應主題庫 JS 需要提前引入theme: 'cobalt',// 顯示行號lineNumbers: true,line: true},// 支持切換的語法高亮類型,對應 JS 已經提前引入// 使用的是 MIME-TYPE ,不過作為前綴的 text/ 在后面指定時寫死了modes: [{value: 'css',label: 'CSS'}, {value: 'javascript',label: 'Javascript'}, {value: 'html',label: 'XML/HTML'}, {value: 'x-java',label: 'Java'}, {value: 'x-objectivec',label: 'Objective-C'}, {value: 'x-python',label: 'Python'}, {value: 'x-rsrc',label: 'R'}, {value: 'x-sh',label: 'Shell'}, {value: 'x-sql',label: 'SQL'}, {value: 'x-swift',label: 'Swift'}, {value: 'x-vue',label: 'Vue'}, {value: 'markdown',label: 'Markdown'}]}},mounted () {// 初始化this._initialize()},methods: {// 初始化_initialize () {// 初始化編輯器實例,傳入需要被實例化的文本域對象和默認配置this.coder = CodeMirror.fromTextArea(this.$refs.textarea, this.options)// 編輯器賦值this.coder.setValue(this.value || this.code)// 支持雙向綁定this.coder.on('change', (coder) => {this.code = coder.getValue()if (this.$emit) {this.$emit('input', this.code)}})// 嘗試從父容器獲取語法類型if (this.language) {// 獲取具體的語法類型對象let modeObj = this._getLanguage(this.language)// 判斷父容器傳入的語法是否被支持if (modeObj) {this.mode = modeObj.label}}},// 獲取當前語法類型_getLanguage (language) {// 在支持的語法類型列表中尋找傳入的語法類型return this.modes.find((mode) => {// 所有的值都忽略大小寫,方便比較let currentLanguage = language.toLowerCase()let currentLabel = mode.label.toLowerCase()let currentValue = mode.value.toLowerCase()// 由于真實值可能不規范,例如 java 的真實值是 x-java ,所以講 value 和 label 同時和傳入語法進行比較return currentLabel === currentLanguage || currentValue === currentLanguage})},// 更改模式changeMode (val) {// 修改編輯器的語法配置this.coder.setOption('mode', `text/${val}`)// 獲取修改后的語法let label = this._getLanguage(val).label.toLowerCase()// 允許父容器通過以下函數監聽當前的語法值this.$emit('language-change', label)}}}
</script><style lang="stylus" rel="stylesheet/stylus">.in-coder-panelflex-grow 1display flexposition relative.CodeMirrorflex-grow 1z-index 1.CodeMirror-codeline-height 19px.code-mode-selectposition absolutez-index 2right 10pxtop 10pxmax-width 130px
</style>


---------------------
作者:asing1elife
來源:CSDN
原文:https://blog.csdn.net/asing1elife/article/details/89249154
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/285275.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285275.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285275.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言試題139之輸入 3 個數 a,b,c,按大小順序輸出(利用指針)

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:輸入 3 個數 a,b,c,按大小順…

【ArcGIS Pro微課1000例】0001:Win7系統ArcGIS Pro2.5安裝權威教程(附軟件安裝包下載)

ArcGIS Pro是ESRI桌面產品線的新秀,集很多新技術于一身,原生支持64位系統,Ribbon界面,支持二三維一體化等。可以與別的版本的ArcGIS軟件共存。 文章目錄 1. 系統環境配置2. 安裝ArcGIS pro3. 打補丁,登錄賬戶4. 安裝中文5. ArcGIS pro 2.5下載地址1. 系統環境配置 ?

Maven發布工程到私服

所謂發布工程就是把工程打包成jar包&#xff0c;然后選擇上傳到私服的某個倉庫里&#xff0c;然后其他人就可以在私服上的倉庫中下載到你發布的工程。 簡單介紹Nexus上自帶的一些倉庫&#xff1a; 如果想要發布工程是需要一個擁有發布權限的用戶的&#xff0c;沒有發布權限的游…

善用兵者,藏于無形,90 分鐘深度講解最佳推廣價值作品

&#x1f4a1;提示本文帶有極大的主觀色彩&#xff0c;及不代表微軟組織的可視化大賽觀點&#xff0c;也不代表作者本人觀點。全部解讀均為這里的獨到觀點&#xff0c;任何解釋錯誤與作者或大賽無關。沒有作品文件下載&#xff0c;全文僅從外觀推斷和賞析整個結構。如果你已經被…

字體類形:font-family, font-style

語法&#xff1a;{font-family:字體1,字體2,字體3,...} 作用&#xff1a;調用客戶端字體 font-family: "Lantinghei SC","Microsoft Yahei",宋體,Arial,Helvetica,sans-serif; 當字體名稱包含兩個以上分開的單詞時&#xff0c;用“”把該字體名稱括起來。…

Java-開源工具類

一、集合 org.springframework.util.CollectionUtils&#xff1b; 二、字符串 com.google.common.base.Strings&#xff1b; org.apache.commons.lang3.StringUtils&#xff1b; 三、時間 java.time.LocalDateTime&#xff1b; 四、json com.alibaba.fastjson&#xff1b; 五、…

C語言試題140之輸入數組,最大的與第一個元素交換,最小的與最后一個元素交換,輸出數組

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:輸入數組,最大的與第一個元…

[轉]cmd 設置環境cmd環境變量命令set 設置永久環境變量命令setx

set命令 set命令用于設置當前cmd窗口中的環境變量&#xff0c;只在當前cmd窗口有效&#xff0c;cmd窗口關閉后將會失效。而其不會影響到系統中保存的用戶環境變量&#xff0c; setx命令 setx設置永久用戶環境變量 setx env_name env_value注意:有的路徑中會帶有空格,所以最好用…

【ArcGIS Pro微課1000例】0003:ArcGIS pro 2.5加載OSGB點云模型案例教程

Esri采用的spk i3s標準(Indexed 3D Scene),是Esri推出的開放標準。I3S標準作為開放的標準已經得到了市面上主流的傾斜攝影測量建模軟件的支持,如Bentley的 ContextCapture(國內簡稱為Smart 3D)、Pix4D、Vricon,這些軟件均支持基于I3S標準的數據格式SLPK的導出,生成的SLP…

HTML基礎第四講---圖像

轉自&#xff1a;https://blog.csdn.net/likaier/article/details/326735 圖像&#xff0c;也就是images&#xff0c;在html語法中用img來表示&#xff0c;其基本的語法是&#xff1a; <img src#> #圖象的 URL&#xff0c;關于url就是指的是圖像在網上的地址。 <i…

機器學習 vs. 深度學習

1. bias/vairance Trend # 1&#xff1a;Scale driving Deep Learning process. 2. feature learning 的方式 A common computer vision pipeline before 2012&#xff1a; a. find interest points.b. crop patches around them.c. represent each patch with a sparse local …

多圖片上傳預覽效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><script src"jquery-2.1.4.min.js"></script> </head> <body><script>//下面用于多圖…

C語言試題141之有 n 個整數,使其前面各數順序向后移 m 個位置,最后 m 個數變成最前面的 m 個數

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:有 n 個整數,使其前面各數順…

dotnet-exec 0.6.0 released

dotnet-exec 0.6.0 releasedIntrodotnet-exec 是一個 C# 程序的小工具&#xff0c;可以用來運行一些簡單的 C# 程序而無需創建項目文件&#xff0c;而且可以自定義項目的入口方法&#xff0c;支持但不限于 Main 方法Install/Updatedotnet-exec 是一個 dotnet tool&#xff0c;可…

VS Code 集成 flutter dart 開發

一、關于Flutter Flutter是谷歌的移動UI框架&#xff0c;可以快速在iOS和Android上構建高質量的原生用戶界面。 Flutter可以與現有的代碼一起工作。在全世界&#xff0c;Flutter正在被越來越多的開發者和組織使用&#xff0c;并且Flutter是完全免費、開源的。 https://flutterc…

【ArcGIS Pro微課1000例】0004:ArcGIS pro 2.5快速批量制作中國分省地圖(建議收藏)

ArcGIS Pro 提供了基于單個布局創建一系列布局頁面的功能,與 ArcMap 中的數據驅動頁面功能類似,但在 ArcGIS Pro 中,術語“地圖系列”用于描述 該功能。動態文本是指放置在地圖布局中且隨地圖文檔、數據框和數據驅動頁面的當前屬性而動態變化的文本。本文講述采用動態文本來…

C語言試題142之有 n 個人圍成一圈,順序排號。從第一個人開始報數(從 1 到 3 報數),凡報到 3 的人退出 圈子,問最后留下的是原來第幾號的那位。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 題目:有 n 個人圍成一圈,順序排號…

eclipse如何調試(Debug)程序(zhuan)

http://jingyan.baidu.com/article/e6c8503c7e46b6e54f1a18c5.html ******************************************* 我們在編寫java程序的過程中&#xff0c;經常會遇到各種莫名其妙的問題&#xff0c;為了檢測程序是哪里出現問題&#xff0c;經常需要增加日志&#xff0c;看變量…

WPF效果第一百九十一篇之框選ListBox

前面效果中基于ListBox實現了一點不一樣的效果;今天再次在原來的基礎上完善框選ListBox;最終實現的效果,如下圖:1、使用了VisualTreeHelper的HitTest方法:Point point2 e.GetPosition(LedListBox);Rect rect new Rect(origContentMouseDownPoint, point2);RectangleGeometry …

epoll socket 服務端中read和write的返回值討論

2019獨角獸企業重金招聘Python工程師標準>>> 先貼一段代碼&#xff0c;代碼很簡單要看過epoll如何使用&#xff0c;都應該能看懂。 這是服務端程序&#xff1a; #include <sys/socket.h> #include <sys/epoll.h> #include <netinet/in.h> #includ…