使用codemirror封装codeEditor.vue组件

<template><div class="in-coder-panel"><textarea ref="textarea" v-model="code"></textarea></div>
</template><script>// 引入全局实例import _CodeMirror from 'codemirror/lib/codemirror'// 核心样式import 'codemirror/lib/codemirror.css'// 引入主题后还需要在 options 中指定主题才会生效// 需要引入具体的语法高亮库才会有对应的语法高亮效果, 目前已动态引入// import 'codemirror/theme/midnight.css'// 主题样式import 'codemirror/addon/hint/show-hint.css'import { reactive, defineComponent, toRefs, getCurrentInstance, onMounted, onBeforeUnmount } from 'vue'// codemirror 官方其实支持通过 /addon/mode/loadmode.js 和 /mode/meta.js 来实现动态加载对应语法高亮库// 但 vue 貌似没有无法在实例初始化后再动态加载对应 JS ,所以此处才把对应的 JS 提前引入import 'codemirror/mode/javascript/javascript.js'const codemirrorThemList = []const requireModules = require.context('codemirror/theme/', false, /\.css$/)requireModules.keys().forEach(value => {const newValue = value.replace(/^\.\//, '').replace(/\.css$/, '')codemirrorThemList.push(newValue)})// 尝试获取全局实例const CodeMirror = window.CodeMirror || _CodeMirrorlet coder = null // 编辑器实例export default defineComponent({name: 'codeEditor',props: {value: {type: String,default: ''},scene: {type: String,default: 'look' // add: 新增; edit: 编辑; look: 查看},eventType: {type: String,default: 'blur' // 可用事件'change', 'blur'等等;具体参考codemirror文档},theme: {type: String,default: '3024-day' // 编辑器主题色}},setup(props, { emit }) {const { proxy } = getCurrentInstance()const data = reactive({code: props.value, // 内部真实的内容// 默认配置options: {mode: 'javascript', // 不设置的话,默认使用第一个引用// 缩进格式tabSize: 2,// 主题,对应主题库 JS 需要提前引入theme: props.theme,// 显示行号lineNumbers: true,readOnly: (props.scene === 'add' || props.scene === 'edit') ? false : 'nocursor' // true: 不可编辑  false: 可编辑 'nocursor' 失焦,不可编辑},// 初始化initialize: () => {// 初始化编辑器实例,传入需要被实例化的文本域对象和默认配置coder = CodeMirror.fromTextArea(proxy.$refs.textarea, data.options)// 此处也可使用'change'事件,不过每次书写的过程中都会触发,为了提高性能,故默认使用'blur'coder.on(props.eventType, coder=> {emit('update:value', coder.getValue())})},// 动态引入语法高亮库importThemDynamic: () => {return new Promise(resolve => {codemirrorThemList.forEach(value => {if (props.theme === value) {import(`codemirror/theme/${props.theme}.css`)resolve()}})})}})onMounted(() => {// console.log('value:', props.value)data.importThemDynamic().then(()=>{data.initialize()})})onBeforeUnmount(()=> {coder.off(props.eventType)})return {...toRefs(data)}}})
</script><style lang="scss"> // 此处不可使用"scoped".in-coder-panel{flex-grow: 1;display: flex;position: relative;.CodeMirror {flex-grow: 1;text-align: left !important;z-index: 1;.CodeMirror-code {line-height: 19px;}}}
</style>

在页面中使用codeEditor.vue

<template><codeEditor v-model:value="code" :scene="type" theme="3024-day"></codeEditor>
</template><script>
import { defineComponent, reactive, toRefs } from 'vue'
import codeEditor from '@/components/common/codeEditor.vue'
export default defineComponent({components: {codeEditor},props: {type: {type: String,default: 'add'}}setup (props) {const data = reactive({code: 'let a = 123'})return {...toRefs(data),...toRefs(props)}}
})
</script>

codemirror参考文档
codemirror主题效果概览

vue3.0在线编辑器codemirror开发相关推荐

  1. vue3.0 结合element ui 开发后台ui框架

    vue3.0 结合element ui 开发后台ui框架,根据element ui 官网步骤安装出现报错信息,解决方法: 按照element UI官网步骤, 启动vue 3.0项目:npm run s ...

  2. DotNetTextBoxV3.0在线编辑器控件Ver3.4.2 Open Source开源版

    英文名:DotNetTextBox V3.0 WYSWYG Web Control For Asp.Net2.0/3.0/3.5 Open Source 中文名:DotNetTextBox V3.0  ...

  3. DotNetTextBoxV3.0在线编辑器控件Ver3.4.1 Open Source开源版(附商业试用版下载)

    英文名:DotNetTextBox V3.0 WYSWYG Web Control For Asp.Net2.0/3.5 Open Source 中文名:DotNetTextBox V3.0 所见即所 ...

  4. FCKeditor 2.0在线编辑器的设置与修改以及使用

    对于一个全新的网站,FCKeditor就可以直接拿过来用了,不需要进行什么修改.但是对于绝大多数的已有网站而言,FCKeditor的一些设置并不适合自己的使用,这篇文章旨在告诉你简单的修改FCKedi ...

  5. DotNetTextBox V3.0 所见即所得编辑器控件Ver3.4.0 FreeVersion(新增商业试用版下载)

    英文名:DotNetTextBox V3.0 WYSWYG Web Control For Asp.Net2.0 and Asp.net3.5 中文名:DotNetTextBox V3.0 所见即所得 ...

  6. 来一起用 Vue3.0 造轮子

    Vue.js 3.0 "One Piece" 已正式发布,33% 的渲染速度提升.41% 的体积缩小.54% 的内存用量下降.代码可维护和可复用性提升--两个字来形容:真香! 你开 ...

  7. 在线代码编辑器 CodeMirror 配置说明 - javascript开发的代码语法高亮显示引擎

    CodeMirror是一款在线的支持语法高亮的代码编辑器.官网: http://codemirror.net/ 下载后,解压开得到的文件夹中,lib下是放的是核心库和核心css,mode下放的是各种支 ...

  8. 【红隼书签】用Vue3.0 开发一款导入浏览器书签的在线书签

    用Vue3.0 开发一款导入浏览器书签的在线书签

  9. markdown在线编辑器 editor.md 二次开发详细教程

    markdown在线编辑器 editor.md 二次开发 需求 经常需要在网络论坛发布文章进行宣传,但每个论坛的编写格式存在差异,给发布带来了很大的障碍. 最近markdown格式的兴起,给广大发布者 ...

最新文章

  1. 【译】表变量和临时表的比较
  2. GMIC来了 HTC VIVE细化VR梦
  3. onTextChanged参数解释及实现EditText字数监听
  4. SpiderData 2019年2月4日 DApp数据排行榜
  5. 利用Oracle Enterprise Manager Cloud Control 12c创建DataGuard Standby
  6. fastreport java 集成_报表生成器配置FastReport.Net环境
  7. 软件无线电 多核服务器,软件无线电 SDR LTE平台简介
  8. remains in conflict解决方法
  9. 主程玩失踪,公司蒸发600w,创始人秒变打工仔(含视频)
  10. LIN自动雨刮:雨量传感器原理与安装
  11. OPCUA 设置登录用户名与密码
  12. 五年磨一剑:滴滴顺风车服务端之稳定性规范
  13. 大数据时代下的小公益
  14. BarTender软件中GS1-128条码如何制作?
  15. L1-051 打折 (5 分)
  16. 【深度学习入门:基于Python的理论与实现】书本学习笔记 第三章 神经网络
  17. 从零开始学习Linux部署Java web项目
  18. 【PKI技术】第一弹 — 什么是PKI?
  19. VS2008在WIN10下安装失败:ISetupComponent::Pre/Post/Install() failed ISetupManager 解决方法(-2147023293)
  20. 【vcruntime140.dll文件下载】vcruntime140.dll丢失的解决方法

热门文章

  1. JavaWeb购物车项目二
  2. 用计算机计算告白密码,阿拉伯数字高级表白密码 很火的表白密码
  3. 区块链技术在三角债清收领域的应用思考
  4. 嵌入式 IIC(I2C)协议
  5. Android 实战项目:简单计算器
  6. Android实现简单的计算器
  7. CUDA+pytorch+DGL安装
  8. 学习Java自学好还是报培训班?
  9. 一个项目的基本要素都有哪些?
  10. text/plain