Markdown编辑器Vditor的基本使用以及在Vue3中使用

news2024/9/20 22:45:25

介绍

官网
GitHub
帮助文档

Vditor是一个Markdown编辑器组件(也支持富文本编辑器),可以嵌入到自己的Web应用中。
此Markdown编辑器支持三种模式(几乎没有一个Markdown编辑器同时支持这三种模式):

  • 所见即所得WYSIWYG(富文本)
  • 即时渲染(类似于Typora)
  • 分屏预览
    支持在原生JS中使用,同样支持目前主流的前端框架Vue、React、Svelte,还支持TS。

安装

安装是不区分框架的,直接安装就好了。

npm i vditor --save

核心对象Vditor

原理就是:在HTML结构中有一个容器,把这个容器交给Vditor管理就可以了。
我们在编辑器中输入的文本,会临时缓存到localStorage中

Vditor编辑器的核心就是Vditor这个类,我们来看一下源码中对这个类的定义

class Vditor extends VditorMethod {
	// ...
    /**
     * @param id 要挂载 Vditor 的元素或者元素 ID。
     * @param options Vditor 参数
     */
     
    constructor(id: string | HTMLElement, options?: IOptions) { }
	// ...
}

创建Vditor对象时,有两个参数:

  • 第一个参数必填,用来指定HTML结构中作为容器的元素。值可以是两种:
    • 元素的id值
    • HTML元素对象,例如`document.getElementById(‘editor-container’)
  • 第二个是配置对象,可选。

知道了这些之后,使用就非常简单了。

原生JS中使用

引入JS、CSS即可。

<link rel="stylesheet" href="https://unpkg.com/vditor/dist/index.css" />
<script src="https://unpkg.com/vditor/dist/index.min.js"></script>

指定一个容器即可,示例代码

<head>
    <link rel="stylesheet" href="https://unpkg.com/vditor/dist/index.css" />
    <script src="https://unpkg.com/vditor/dist/index.min.js"></script>
</head>

<body>
    <div id="vditor"></div>
    <script>
        // 第一个参数是容器的id,必填
        // 第二个参数是配置对象,可选
        new Vditor('vditor',{})
    </script>
</body>

Vue3中基本使用

知道了以上的核心原理之后,在Vue中使用就很简单了。
第一步安装。

npm install vditor --save

第二步使用

<script setup>
// 1.1 引入Vditor 构造函数
import Vditor from 'vditor'
// 1.2 引入样式
import 'vditor/dist/index.css';
import { ref, onMounted } from 'vue';

// 2. 获取DOM引用
const vditor = ref()

// 3. 在组件初始化时,就创建Vditor对象,并引用
onMounted(() => {
  vditor.value = new Vditor('vditor',{
    height: '50vh',
    width: '50vw'
  })
})

</script>

<template>
  <!-- 指定一个容器 -->
  <div id="vditor"></div>
</template>

因为我们肯定是要操作Vditor对象,所以才会通过DOM引用来指向Vditor对象。
如果只是new Vditor(),虽然有了编辑器,但是我们没法操作Vditor对象,所以通过Vue中的ref对象来指向Vditor对象。

常用配置项

创建Vditor对象时,通过第二个参数传入配置对象。
关于有哪些配置项,可以看官网——option,我这里说几个常用的

  • width编辑器的宽度
  • height编辑器的高度
  • lang编辑器的语言
  • value编辑器中的值,即编辑器中的真实的值
  • input(value)输入时的回调函数
  • focus(value)编辑器获取到焦点时的回调函数
  • blur(value)编辑器失去焦点时的回调函数,例如可以在此时保存文档等

以上是编辑器的基本配置项,下面是工具栏相关的配置项

  • toolbarConfig是否开启工具栏,有两个子配置:
    • hide是否隐藏工具栏,默认值false
    • pin是否固定工具栏,默认false
  • toolbar,该配置项是一个数组,用来列出工具栏中的工具。
    • 通过工具名称,枚举工具栏中的工具toolbar: ['emoji', 'br', 'bold', '|', 'line']
    • Vditor内置的工具的名称有:
      • emoji , headings , bold , italic , strike , | , line , quote , list , ordered-list , check ,outdent ,indent , code , inline-code , insert-after , insert-before ,undo , redo , upload , link , table , record , edit-mode , both , preview , fullscreen , outline , code-theme , content-theme , export, devtools , info , help , br
    • 还可以自定义工具,看官网__toolbar

在创建Vditor时传入的这个配置对象,会直接挂载到Vditor对象身上,属性名叫做options

看个样例

new Vditor('vditor',{
    // 编辑器中默认展示的文本
    value:'请在此处输入Markdown文本',
    // 设置编辑器的宽高
    height: '50vh',
    width: '50vw',
    // 设置工具栏中展示的工具
    toolbar: ['emoji', 'br', 'bold', '|', 'line','quote','list','check'],
    // 编辑器失去焦点后的回调函数
    blur(value){
      // 保存文档....
      console.log('保存成功')
    }
  })

常用 API

我们是通过操作Vditor对象来操作整个编辑器的,所以下面的API是利用Vditor对象来调用的。

通过Vditor对象调用以下API:

  • setTheme()设置编辑器主题名称name
  • getValue()获取原始的Markdown文本内容
  • setValue()设置编辑器的值,即Markdown的内容
  • getHTML()获取渲染后的HTML内容
  • focus()聚焦到编辑器上
  • blur()编辑器失去焦点
  • disabled()禁用编辑器
  • enable()编辑器解除禁用
  • getCursorPosition()获取焦点位置,即此时光标的坐标
  • insertValue()在焦点处插入内容,并默认进行Markdown渲染
  • clearCache()清空缓存在localStorage中的内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/733589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于matlab消除视频流中摄像机运动的影响(附源码)

一、前言 此示例演示如何从视频流中删除摄像机运动的影响。 在此示例中&#xff0c;我们首先定义要跟踪的目标。在这种情况下&#xff0c;它是汽车的后部和车牌。我们还建立了一个动态搜索区域&#xff0c;其位置由最后一个已知的目标位置确定。然后&#xff0c;我们仅在此搜…

ChatGPT引导下的编程起航:零基础学会Python编程(ChatGPT版)

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言如何使用 ChatGPT对…

【C++】C++11之线程库

一、thread类 在 C11 之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如 windows 和 linux 下各有自己的接 口&#xff0c;这使得代码的可移植性比较差 。 C11 中最重要的特性就是对线程进行支持了&#xff0c;使得 C 在 并行编程时不需要依赖第三…

刚发offer,明天就让上班!原公司离职手续还没办,说晚两天报到,hr竟取消offer,录用其他人!...

这年头找工作有多难&#xff1f;一位网友吐槽&#xff1a;一瞬间从天堂掉进地狱&#xff01; 楼主说&#xff0c;hr今天刚发了offer&#xff0c;就让明天来上班。自己说明天不可能&#xff0c;原公司离职手续还没办完&#xff0c;hr就取消了offer&#xff0c;转而录用了其他候选…

MySQL基本查询与内置函数

目录 聚合函数 分组查询 内置函数 日期函数 字符串函数 数学函数 聚合函数 COUNT&#xff1a;返回查询到的数据的数量 SUM&#xff1a;返回查询到的数据的总和&#xff08;数字&#xff09; AVG&#xff1a;返回数据的平均值 MAX&#xff1a;返回查询到的数据的最大值 MIN&a…

毫米波雷达系列 | 毫米波雷达测角原理-补档

毫米波雷达测角原理 角度分辨率 当估算角度分辨率最少需要两个RX天线&#xff0c;利用的是物体相对每个天线的差分距离。 假设雷达具有一个发射天线TX和两根接受天线RX1和RX2之间的间距为d&#xff0c; θ \theta θ为目标相对天线的角度&#xff0c;那么接受天线之间的相位…

OpenCV 入门教程:颜色空间转换

OpenCV 入门教程&#xff1a;颜色空间转换 导语一、颜色空间的基本概念1.1 RGB颜色空间1.2 灰度颜色空间1.3 其他颜色空间 二、颜色空间转换三、示例应用3.1 提取图像的色彩通道3.2 调整图像的亮度和对比度 总结 导语 在图像处理和计算机视觉领域&#xff0c;颜色空间转换是一…

学无止境·MySQL③

单表查询 题一创建表并插入数据薪水修改为5000将姓名为张三的员工薪水修改为3000元将姓名为李四的员工薪水修改为4000元&#xff0c;gener改为女 题一 1.创建表&#xff1a; 创建员工表employee&#xff0c;字段如下&#xff1a; id&#xff08;员工编号&#xff09;&#xff…

CVE 官网提交流程

CVE 官网提交流程 一、进入官网申请 https://cveform.mitre.org/ 选择申请CVE ID即可。 Vulnerability type翻译&#xff08;chatgpt-3.5&#xff09;buffer overflow缓冲区溢出是一种软件漏洞&#xff0c;攻击者在向缓冲区写入超出其容量的数据时&#xff0c;可能导致数据覆…

一文搞懂常见的加密算法

加密算法在互联网技术领域中几乎是无处不在&#xff0c;而密码学也是网络安全的重要基础&#xff0c;这篇文章我们就一起来学习下常见的加密算法。 1 为什么要研究加密算法&#xff1f; 在技术方面&#xff0c;加密算法的研究具有重要的意义&#xff0c;主要体现在以下几个方…

【LeetCode】HOT 100(25)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

从零开始 Spring Boot 66:JPA 查询参数

从零开始 Spring Boot 66&#xff1a;JPA 查询参数 图源&#xff1a;简书 (jianshu.com) JPA 的查询参数分为两种&#xff1a; 命名参数&#xff08;Named Parameters&#xff09;位置参数&#xff08;Positional Parameters&#xff09; 类似于 Python 中的函数的位置参数和…

Linux的网络配置与远程连接与文件传输

&#xff08;该图由AI绘制 关注我 学习AI画图&#xff09; 目录 网络配置 1、ifconfig查看网络信息 2、与网卡相关的配置文件 3、查询计算机的网络状态 4、systemctl启动/重启/停止网络 Linux远程连接与文件传输 1、为什么需要远程连接 2、SSH协议 3、sshd服务 4、…

2023CCF CAT- 热身赛

NOIP普及组 字符串 排序2017 动态规划 递推 USACO 2001 贪心 牛客小白月赛12 说实话还是很喜欢打比赛&#xff0c;喜欢AC的感觉&#xff0c;但是这玩意咋越来越难了那。。。。。 扎心了&#xff0c;不是~~~~~ 当个爱好吧&#xff0c;还是很喜欢当年打比赛和队友相视一笑的样子…

宇凡微2.4g无线合封芯片,高集成内置九齐单片机

2.4GHz是指一段频率范围&#xff0c;用来表示无线通信中的特定频率范围。在无线传输产品和设备中&#xff0c;2.4GHz被广泛应用&#xff0c;用于传输固定频率的波形以实现接收和发射功能。 需要注意的是&#xff0c;2.4GHz和蓝牙功能在基本上是相似的&#xff0c;但并不是所有…

前端面试刷题整理

第一题&#xff1a;es6 class语法 题目&#xff1a;现有三种菜单&#xff0c;button属性&#xff0c;select属性&#xff0c;model属性 class Mune{constructor(title,icon){this.title titlethis.icon icon}isDisabled(){return false}exec(){} } class Button extends Mun…

LeakTracer代码学习(1)

项目中有的时候会产生内存泄漏&#xff0c;以往的经验&#xff0c;检测工具更倾向于使用LeakTracer进行检测泄漏问题&#xff0c;但是直接使用会有些问题&#xff0c;比如堆栈不全都是??等问题&#xff0c;该专题希望自己能够坚持将LeakTracer的源码梳理清楚&#xff0c;以供…

ModaHub魔搭社区:RESTful API 的方式访问全球领先的向量数据库Milvus

目录 Insert CreateIndex and Load Search or Query 作为全球领先的开源向量数据库,Milvus 一直致力于满足不同用户的场景和需求,聆听社区的声音。 最近, 我们发现,很多用户的数据中 常常包含各种不确定类型的数据,也有用户提出希望以 RESTful API 的方式访问 Milvus。…

【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答(三)

贴接上回。。。 【往期FAQ参考】 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答&#xff08;一&#xff09; 【HarmonyOS】【FAQ】HarmonyOS应用开发相关问题解答&#xff08;二&#xff09; 【本期FAQ】 1、第一次调用geolocation.getCurrentLocation()接口&#xff…

一份非常牛逼的计算机相关技术资料整理

最近发现GitHub上一个非常牛逼的项目。作者收录了一整套 计算机相关的技术资料整理。 收录内容包括&#xff0c;但不仅仅包括&#xff0c;比如比较实用的计算机相关技术书籍&#xff0c;可以在短期之内入门的简单实用教程、一些技术网站以及一些写的比较好的博文。真的得给作者…