中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Vue項目中集成Ace代碼編輯器

發布時間:2023-04-25 14:42:46 來源:億速云 閱讀:247 作者:iii 欄目:編程語言

這篇文章主要介紹“怎么在Vue項目中集成Ace代碼編輯器”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么在Vue項目中集成Ace代碼編輯器”文章能幫助大家解決問題。

簡介

Ace 是一個用 JavaScript 編寫的可嵌入代碼編輯器。它與 Sublime、Vim 和 TextMate 等原生編輯器的功能和性能相匹配。它可以很容易地嵌入到任何網頁和 JavaScript 應用程序中。Ace 被維護為Cloud9 IDE的主要編輯器 ,并且是 Mozilla Skywriter (Bespin) 項目的繼承者。

特性

  • 超過 110 種語言的語法高亮顯示(可以導入TextMate/Sublime Text  .tmlanguage文件)

  • 超過 20 個主題(可以導入TextMate/Sublime Text  .tmtheme文件)

  • 自動縮進和升級

  • 一個可選的命令行

  • 處理巨大的文檔(四百萬行似乎是極限!)

  • 完全可定制的鍵綁定,包括 vim 和 Emacs 模式

  • 使用正則表達式搜索和替換

  • 突出顯示匹配的括號

  • 在軟選項卡和真實選項卡之間切換

  • 顯示隱藏字符

  • 使用鼠標拖放文本

  • 換行

  • 代碼折疊

  • 多個光標和選擇

  • 實時語法檢查器(當前為 JavaScript/CoffeeScript/CSS/XQuery)

  • 剪切、復制和粘貼功能

快速開始

  • 你也可以直接使用vue2-ace-editor ,按照步驟集成即可

  • 這里主要記錄使用ace-builds,在項目中自己封裝Ace組件

安裝
npm install ace-builds --save-dev復制代碼

安裝完的效果如下:

怎么在Vue項目中集成Ace代碼編輯器

集成

新建文件夾AceEditor

怎么在Vue項目中集成Ace代碼編輯器

在AceEditor文件,新建index.vue, 代碼如下:

<template>
  <div
    ref="editorform"
   
    style="height: 250px"
  >
  </div>
</template>

<script>
import ace from 'ace-builds'
import './webpack-resolver' // 自定義webpack-resolver,按需引入
import 'ace-builds/src-noconflict/mode-json'
import 'ace-builds/src-noconflict/mode-mysql'
import 'ace-builds/src-noconflict/mode-text'
import 'ace-builds/src-noconflict/theme-tomorrow'
import 'ace-builds/src-min-noconflict/ext-language_tools'
import { onMounted, onBeforeUnmount, ref, watch } from '@vue/composition-api'

export default {
  name: 'AceEditor',
  emits: ['onChange'],
  props: {
    value: {
      type: String,
      default: '',
    },
    // 這里可以接收更多組件傳遞的參數,做一些自定義效果
  },
  setup(props, vm) {
    let editor = null
    const editorform = ref(null)
    let options = {
      theme: 'ace/theme/tomorrow', // 主題
      mode: 'ace/mode/mysql', // 代碼匹配模式
      tabSize: 2, //標簽大小
      fontSize: 14, //設置字號
      wrap: true, // 用戶輸入的sql語句,自動換行
      enableSnippets: true, // 啟用代碼段
      showLineNumbers: true, // 顯示行號
      enableLiveAutocompletion: true, // 啟用實時自動完成功能 (比如:智能代碼提示)
      enableBasicAutocompletion: true, // 啟用基本自動完成功能
      scrollPastEnd: true, // 滾動位置
      highlightActiveLine: true, // 高亮當前行
    }

    const init = () => {
      if (editor) {
        //實例銷毀
        editor.destroy()
      }
      //初始化
      editor = ace.edit(editorform.value, options)
      editor.setValue(props.value ? props.value : '') // 設置內容
      editor.on('change', () => {
        vm.emit('onChange', editor.getValue())
      })
    }
    
    onMounted(() => {
      init()
    })
    
    onBeforeUnmount(() => {
      editor.destroy()
      editor.container.remove()
    })
    return {
      editorform
    }
  },
}
</script>

<style>
@import '~ace-builds/css/ace.css';
</style>

關于webpack-resolver.js的優化

在 webpack 環境中需要導入webpack-resolver.js,我們先看下node_modules/ace-builds/webpack-resolver.js文件,里面大部分模塊是我們用不到的,直接引入的話,會大大增加項目包的體積,所以這里我們需要做下優化:按需引入怎么在Vue項目中集成Ace代碼編輯器在AceEditor文件,新建webpack-resolver.js, 代碼如下:

ace.config.setModuleUrl('ace/mode/mysql', require('file-loader?esModule=false!ace-builds/src-noconflict/mode-mysql.js'))
ace.config.setModuleUrl('ace/mode/text', require('file-loader?esModule=false!ace-builds/src-noconflict/mode-text.js'))
ace.config.setModuleUrl('ace/mode/json', require('file-loader?esModule=false!ace-builds/src-noconflict/mode-json.js'))
ace.config.setModuleUrl('ace/theme/tomorrow', require('file-loader?esModule=false!ace-builds/src-noconflict/theme-tomorrow.js'))
ace.config.setModuleUrl('ace/ext/language_tools', require('file-loader?esModule=false!ace-builds/src-noconflict/ext-language_tools.js'))

在項目的src目錄下,新建registAce.js

import ACE from '@/components/AceEditor' // 這里是你創建的AceEditor文件夾的路徑
 
export default {
  install(Vue) {
    Vue.component('ace', ACE)
  },
}

在 Vue 項目的入口文件 main.js 中引入 Ace 模塊,Vue.use()全局注冊ace組件

import ace from 'ace-builds'
import RegistAce from './registAce'

Vue.use(ace)
Vue.use(RegistAce)

使用ace組件(全局組件)

<ace v-model="content" @onChange="onChange"> </ace>

以上,就在Vue項目中完成了Ace的簡單集成,更多功能可以參考官網: Ace官網

配置項

官網wiki: github.com/ajaxorg/ace…

Core ace components (editor, session, renderer, mouseHandler) implement optionProvider interface

setOption(optionName, optionValue)
setOptions({
    optionName : optionValue
    ...
})
getOption(optionName)
getOptions()

以下是配置選項的列表。除非另有說明,否則選項值為布爾值。

editor.setOption也會修改session/renderer/$mouseHandler與之關聯的選項

editor options
選項名值類型默認值可選值功能
selectionStyleStringtextline | text選中樣式
highlightActiveLineBooleantrue-高亮當前行
highlightSelectedWordBooleantrue-高亮選中文本
readOnlyBooleanfalse-是否只讀
cursorStyleStringaceace | slim | smooth | wide光標樣式
mergeUndoDeltasString | Booleanfalsealways合并撤銷
behavioursEnabledBooleantrue-啟用行為
wrapBehavioursEnabledBooleantrue-啟用換行
autoScrollEditorIntoViewBooleanfalse-啟用滾動
copyWithEmptySelectionBooleantrue-復制空格
useSoftTabsBooleanfalse-使用軟標簽
navigateWithinSoftTabsBooleanfalse-軟標簽跳轉
enableMultiselectBooleanfalse-選中多處
renderer options
選項名值類型默認值可選值功能
hScrollBarAlwaysVisibleBooleanfalse-縱向滾動條始終可見
vScrollBarAlwaysVisibleBooleanfalse-橫向滾動條始終可見
highlightGutterLineBooleantrue-高亮邊線
animatedScrollBooleanfalse-滾動動畫
showInvisiblesBooleanfalse-顯示不可見字符
showPrintMarginBooleantrue-顯示打印邊距
printMarginColumnNumber80-設置頁邊距
printMarginBoolean | Numberfalse-顯示并設置頁邊距
fadeFoldWidgetsBooleanfalse-淡入折疊部件
showFoldWidgetsBooleantrue-顯示折疊部件
showLineNumbersBooleantrue-顯示行號
showGutterBooleantrue-顯示行號區域
displayIndentGuidesBooleantrue-顯示參考線
fontSizeNumber | Stringinherit-設置字號
fontFamilyStringinherit
設置字體
maxLinesNumber--至多行數
minLinesNumber--至少行數
scrollPastEndBoolean | Number0-滾動位置
fixedWidthGutterBooleanfalse-固定行號區域寬度
themeString--主題引用路徑,例如"ace/theme/textmate"
mouseHandler options
選項名值類型默認值可選值備注
scrollSpeedNumber--滾動速度
dragDelayNumber--拖拽延時
dragEnabledBooleantrue-是否啟用拖動
focusTimoutNumber--聚焦超時
tooltipFollowsMouseBooleanfalse-鼠標提示
session options
選項名值類型默認值可選值備注
firstLineNumberNumber1-起始行號
overwriteBoolean--重做
newLineModeStringautoauto | unix | windows新開行模式
useWorkerBoolean--使用輔助對象
useSoftTabsBoolean--使用軟標簽
tabSizeNumber--標簽大小
wrapBoolean--換行
foldStyleString-markbegin | markbeginend | manual折疊樣式
modeString--代碼匹配模式,例如“ace/mode/text"
editor options defined by extensions
選項名值類型默認值可選值備注
enableBasicAutocompletionBoolean--啟用基本自動完成
enableLiveAutocompletionBoolean--啟用實時自動完成
enableSnippetsBoolean--啟用代碼段
enableEmmetBoolean--啟用Emmet
useElasticTabstopsBoolean--使用彈性制表位

解決光標錯位問題

當在編輯器中輸入內容的時候,會出現光標錯位的問題,開始看起來是正常的,輸入的內容越多,光標錯位越多怎么在Vue項目中集成Ace代碼編輯器一通排查,發現是因為使用了非等寬字體,導致計算不準確,將編輯框里面的字體設置為等寬字體即可解決問題

??注意:這里還有個小坑,在設置等寬字體時需要區分Mac、Windows

  • Mac 下可以使用monospace字體

  • Windows 下可以使用 Consolas 字體

關于“怎么在Vue項目中集成Ace代碼編輯器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

韩城市| 阿尔山市| 苗栗市| 锡林郭勒盟| 富蕴县| 两当县| 措勤县| 恩平市| 白山市| 林西县| 平安县| 福建省| 江油市| 昌图县| 凌云县| 五峰| 浮山县| 湘阴县| 班戈县| 中阳县| 徐水县| 五台县| 和政县| 中卫市| 河北区| 宁夏| 灌云县| 开原市| 大兴区| 宣威市| 高雄县| 遵义县| 福安市| 定兴县| 花垣县| 龙井市| 恭城| 宣恩县| 大同县| 邛崃市| 新晃|