在vue3中使用codemirror

2023-11-09

前言

最近为了完成学校的大作业,需要制作markdown编辑器,为了用户输入方便,使用了codemirror来做编辑器。本文介绍的只是很简单的使用配置,更多内容请查阅官方文档

引入

npm i codemirror

在vue3中使用

基本配置

具体的配置可以看官方网站
https://codemirror.net/5/doc/manual.html#config

// html部分
<textarea ref="l"></textarea>

// 引入
import CodeMirror from "codemirror";

// codemirror配置
const l = ref(null);
onMounted(() => {
     const editor=CodeMirror.fromTextArea(l.value, {
       mode: "markdown",// 模式
       theme: "solarized", // 主题
       lineWrapping: true,// 自动换行
       scrollPastEnd: true,// 允许用户将一个编辑器高度的空白区域滚动到编辑器底部的视图
       lineNumbers: true,// 显示左边行号(默认false,即不显示)
       styleActiveLine: true, // 当前行背景高亮
     });
}

更改编辑框的外部样式(高度、宽度)

第一种改css

.CodeMirror {
  border: 1px solid #eee;
  height: auto;
}

第二种使用editor.setSize()方法,第一个宽,第二个高

获取和修改内容

// 获取
editor.getValue();
// 修改
editor.setValue('要赋予的值');

添加删除事件

具体可以看官网
https://codemirror.net/5/doc/manual.html#events
以change(当编辑器内容改变时触发,类似于input的change)举例:

editor.on('change', (cm, msg) => {
        console.log(cm == editor);// true
        console.log(msg);// 改变内容的信息
})

第二个参数截图在这里插入图片描述

实现markdown过程中遇到的bug

  1. 没有内容也可以滚动,原来的.CodeMirror-sizer的height值为120%(找了有点久/(ㄒoㄒ)/~~
.CodeMirror-sizer {
        height: 100%;
      }
  1. 实现同步滚动过程中遇到鼠标不滚动了,但页面还是滚动的问题,因为两边都绑定了滚动事件,形成了死循环。解决方法:设置一个变量来记录当前哪边触发滚动。
    在这里插入图片描述
  2. codemirror报错 Uncaught TypeError: Cannot read properties of undefined (reading ‘map‘)

原因:由于我用了pinia去存储codemirror的对象,获取使用时codemirror对象变成了proxy对象,没有用真正的codemirror对象。
解决方案:在获取使用用toRaw()来获取真正的codemirror对象再使用。

import { toRaw } from "@vue/reactivity";
const editor = toRaw(editorStore().editor);

这样再去使用就不会报错了。
目前为什么这样会出错,我还不知道原因,如果有知道的,请务必告诉我,谢谢!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在vue3中使用codemirror 的相关文章

随机推荐

  • idea导入Web项目并配置tomcat运行

    文章目录 一 导入项目 二 配置tomcat 三 配置Web项目在tomcat下的运行包 一 导入项目 File gt Open 然后选择要导入的web项目路径 二 配置tomcat 第一步 单机右上角的Edit Configuration
  • 面试题:海量数据去重、Top-k、BitMap问题整理

    问题引入 首先直接进入正题 40亿QQ号如何设计算法去重 相同的QQ号码仅保留一个 内存限制为1个G 腾讯的QQ号都是4字节正整数 所以QQ号码的个数是43亿左右 理论值2 32 1个 又因为是无符号的 翻倍了一下 所以43亿左右 方法1
  • 交错级数如何判断收敛_11种常数项级数敛散性判别法(审敛法)的粗糙总结&11道好玩的小题...

    追不上的上古玄武告诉我们 无穷个正数加在一起不一定是正无穷 以此为开端 有了极限的观念 还有了级数的观念 很多数列的Sn很难求 这篇文章只讨论极其片面的判断常数项级数是否收敛的十一个方法 PART 1 对于十一种 级数敛散性 判别法的粗糙总
  • STATA:缩尾、截尾的概念和命令

  • Python字符串地常规操作:取值,切片,查找,替换,分割,拼接,转义

    字符串操作 字符串取值 字符串取单个值 举例 从零开始 每个字符对应的索引 h 0 e 1 l 3 s hell0 a tong print s 0 print s 5 在这里 符号 也是一个字符 print s 7 索引为7 对应的是 空
  • eclipse 配置 Tomcat 遇到的问题以及解决办法

    Eclipse是一个开发JSP的很好的工具 而笔者在配置Tomcat服务器的时候遇到了一些小问题 在这里给大家总结一些经验 希望能帮助同样遇到这些问题的广大同行们能够简单轻松地解决这些问题 笔者在以前自学JSP的时候曾经用过Tomcat E
  • Android ,java.io.IOException: Failed to instantiate extractor.

    mediaExtractor new MediaExtractor mediaExtractor setDataSource mFilePath mFilePath 为 sd 上路径 sdcard 月亮代表我的心萨克斯2 mp3 1 检查
  • 【Java】环境配置以及快速切换环境的技巧和方法

    前言 前几天想用 burp 抓包来着 发现 burp 突然不能用了 重装了 burp 发现还是不能用 意识到是 java 环境出了问题 在之前有段时间没玩 CTF 去搞开发了 于是java环境糊里糊涂改成了 JAVA 18 结果之前的 bu
  • Android项目JNI层C/C++文件中添加LOG信息

    第一步 在项目的mk文件中加入 LOCAL LDLIBS llog 第二步 在要添加LOG的cpp文件中引入一个头文件和添加一个定义 include
  • M - Mountaineers (MST+树上倍增)

    将原图中点每个点四连通方向的点建边 权值为两点权值中较大者的值 对这个图建立最小生成树 那么最小生成树上任意两点之间路径上的最大点权即为答案 因为是树 所以任意两点间的简单路径唯一 通过树上倍增维护维护树上区间最值求出最大值即可 pragm
  • pid算法控制

    一 先来彻底搞懂PID到底是啥 啥是PID PID 就是 比例 proportional 积分 integral 微分 derivative 是一种很常见的控制算法 在工程实际中 应用最为广泛的调节器控制规律为比例 积分 微分控制 简称PI
  • 数据结构_串的匹配(BF和KMP算法)

    数据结构 串的匹配 BF和KMP算法 BF brute force 算法 算法定义 代码实现 算法分析 KMP算法 算法详解 代码实现 算法分析 子串的定位运算通常被称为串的模式匹配或串匹配 BF brute force 算法 算法定义 一
  • cmd pc如何开多个微信_多个合伙人开公司,股权应该如何分配

    伴随着互联网发展的越来越快 不少的创业型的公司在这快节奏的时代以惊人的速度展现在世人面前 但是这个同时创业的道路也是艰辛的 不过有着志同道合的小伙伴或许能够在成功的道路上又多了几分把握 有句俗话说的好你能走多远 将取决于是谁与你同行 虽然说
  • 【已成功解决】使用vpn/代理后无法正常上网/无法正常访问网站

    文章目录 一 问题描述 二 解决步骤 三 原因分析 一 问题描述 很多同学在学习访问学校提供的资源时或者一些小伙伴在公司办公时需要使用VPN 但是当我们关闭VPN后 却发现没有办法正常连接到互联网了 可以尝试以下方法解决 至于导致这种情况发
  • ANSI是个啥???

    来自 https blog csdn net imxiangzi article details 77370160 http www cnblogs com malecrab p 5300486 html 用Notepad 创建一个文本文件
  • 解决Android 8.1 获取不到wifi名称

    在安卓8 1版本中 用 WifiInfo getSSID 可能出现 unknown ssid 或者什么也没读出来 解决方案 用ConnectivityManager 这个类解决 代码如下 获取SSID param return WIFI 的
  • 前端传JSON嵌套类,且属性名首字母大写时后端接收的一些坑

    因为开发腾讯云业务 要写一个回调函数 规范文档上说会传一个json传给我 EventType ComposeMediaComplete ComposeMediaCompleteEvent TaskId 1256768367 ComposeM
  • stm32局部变量过大,导致栈溢出

    在做一个以stm32为主控的项目时发现自己程序中一个机构体里面的数据总是一运行就被改变 刚开始以为是自己不小心在哪个地方用了extern扩展了变量的作用域 重新赋了值 自己忘记了 后来查找了好久都没有其他地方使用这个结构体变量 于是开始单步
  • 配置文件及其解析

    配置文件 properties xml 配置文件可以解决我们在编程中遇到的硬编码问题 那么什么是硬编码呢 硬编码 将一些经常调用修改的数据代码直接写死在了java源代码程序中 就会产生硬编码问题 一般情况下 通过配置文件来解决硬编码问题 在
  • 在vue3中使用codemirror

    文章目录 前言 引入 在vue3中使用 基本配置 更改编辑框的外部样式 高度 宽度 获取和修改内容 添加删除事件 实现markdown过程中遇到的bug 前言 最近为了完成学校的大作业 需要制作markdown编辑器 为了用户输入方便 使用