当前位置: 首页 > news >正文

vue3中使用cherry-markDown步骤

附cherry-markDown官网及api使用示例

官网:GitHub - Tencent/cherry-markdown: ✨ A Markdown Editor

api:Cherry Markdown API

考虑到复用性,我在插件的基础上做了二次封装,步骤如下:

1.下载  npm install cherry-markdown --save

2..先在html中定义一个markDown容器,设置id及样式

<template><div v-loading="loading" element-loading-text="文件上传中..."><div @click.prevent.stop><div :id="mdId" :style="{ height: height + 'px' }"></div></div></div>
</template>

3.在js中引入markDown

import Cherry from "cherry-markdown";
import "cherry-markdown/dist/cherry-markdown.min.css";

4.定义需要使用的变量并初始化markDown

(一部分是从父组件传过来的,loading是在上传图片/视频/附件的时候使用)

const props = defineProps({height: {type: Number,default: 600,},modelValue: {type: String,default: "",},knwlgId: {type: String,default: "",},mdId: {type: String,default: "markdown-container",},
});
const emits = defineEmits(["update:modelValue", "setHtml"]);
const cherrInstance = ref(null);
const loading = ref(false);onMounted(() => {//初始化markDowninitCherryMD();
});

5.初始化markDown

toolbars.toolbar内的togglePreview就是预览按钮

设置默认模式:editor.defaultModel

// defaultModel 编辑器初始化后的默认模式,一共有三种模式:1、双栏编辑预览模式;2、纯编辑模式;3、预览模式

// edit&preview: 双栏编辑预览模式

// editOnly: 纯编辑模式(没有预览,可通过toolbar切换成双栏或预览模式)

// previewOnly: 预览模式(没有编辑框,toolbar只显示“返回编辑”按钮,可通过toolbar切换成编辑模式)

// defaultModel: 'edit&preview',

const initCherryMD = (value, config) => {cherrInstance.value = new Cherry({id: props.mdId,value: props.modelValue,fileUpload: fileUpload,emoji: {useUnicode: true,},header: {anchorStyle: "autonumber",},editor: {defaultModel: "editOnly",},toolbars: {theme: "light",toolbar: ["bold","italic","underline","strikethrough","|","color","header","|","list","image",{insert: ["audio","video","link","hr","br","code","formula","toc","table","line-table","bar-table","pdf","word",],},"graph","settings",// "switchModel","togglePreview",],bubble: ["bold","italic","underline","strikethrough","sub","sup","|","size","color",],float: ["h1","h2","h3","|","checklist","quote","quickTable","code",],customMenu: [],},callback: {afterChange: afterChange,beforeImageMounted: beforeImageMounted,},});
};

6.定义上传图片、获取数据的方法(这里可以实际需求做判断)

// 上传通用接口未实现audioVideo
const fileUpload = (file, callback) => {if (file.size / 1024 / 1024 > 200) {return proxy.$modal.msgError("请上传200M以内的图片!");}if (!file.type.includes("image")) {return proxy.$modal.msgError("仅支持上传图片!");}const formData = new FormData();formData.append("file", file);console.log(file, "file");loading.value = true;uploadImg(props.knwlgId, formData).then((res) => {loading.value = false;callback(import.meta.env.VITE_APP_BASE_API +"/ekms/images/v1/preview/" +res.data.imgId);}).catch(() => {loading.value = false;});
};// 变更事件回调
const afterChange = (e) => {emits("setHtml", getCherryContent(), getCherryHtml());
};// 获取渲染后html内容
const getCherryHtml = () => {const result = cherrInstance.value.getHtml();// console.log(result, "get");return result;
};// 获取markdown内容
const getCherryContent = () => {const result = cherrInstance.value.getMarkdown();return result;
};// 设置markdown内容
const setCherryContent = (val) => {cherrInstance.value.setMarkdown(val, 1);
};// 图片加载回调
const beforeImageMounted = (e, src) => {return { [e]: src };
};
defineExpose({getCherryHtml,setCherryContent,
});

使用该组件:

 <CherryMDref="MDRef"v-model="mdContent":knwlgId="artDetails.pkId"@setHtml="getContent"/>const mdContent = ref("");//设置默认值mdContent.value = res.data.content;nextTick(() => {proxy.$refs.MDRef.setCherryContent(res.data.content || "");});// 获取文章结构信息
const getContent = (content, html) => {mdHtml.value = html;mdContent.value = content;changeArticle();
};

相关文章:

vue3中使用cherry-markDown步骤

附cherry-markDown官网及api使用示例 官网&#xff1a;GitHub - Tencent/cherry-markdown: ✨ A Markdown Editor api&#xff1a;Cherry Markdown API 考虑到复用性&#xff0c;我在插件的基础上做了二次封装&#xff0c;步骤如下&#xff1a; 1.下载 npm install cherry-ma…...

数据建模方法论及实施步骤

了解数据建模之前首先要知道的是什么是数据模型。数据模型&#xff08;Data Model&#xff09;是数据特征的抽象&#xff0c;它从抽象层次上描述了系统的静态特征、动态行为和约束条件&#xff0c;为数据库系统的信息表示与操作提供一个抽象的框架。 一、概要&#xff1a;数据…...

AUTOSAR知识点 之 COM (一):基础知识

目录 1、概述 1.1、简介 1.2、各模块依赖关系 1.2.1、PDUR关系 1.2.2、RTE 2、SPEC解读...

自媒体品牌宣传策略注意哪些,是怎么种草的

众所周知&#xff0c;小红书平台有着极其强大的种草能力。不论新品牌孵化&#xff0c;还是大品牌扩张&#xff0c;都会将目光投注到这里&#xff0c;那么小红书的品牌宣传策略究竟是怎样的呢。 一、聚焦种草能力 前面已经提到了&#xff0c;小红书平台是一个以“种草”为特色的…...

网络带宽管理

网络某一部分的带宽使用过多&#xff0c;可能会影响整个网络的性能&#xff0c;带宽问题甚至会影响业务关键型服务并导致网络停机。在企业中保持稳定的网络性能可能具有挑战性&#xff0c;因为采用数字化的网络可扩展性和敏捷性应该与组织的发展同步。随着基础设施的扩展、新应…...

SpringCloud(27. Redis 和 ZK 分布式锁)

上一篇 &#xff1a;26.分布式服务框架Dubbo面试题简析 1. redis 分布式锁 官方叫做 RedLock 算法&#xff0c;是 redis 官方支持的分布式锁算法。这个分布式锁有 3 个重要的考量点&#xff1a; 互斥&#xff08;只能有一个客户端获取锁&#xff09;不能死锁容错&#xff08;…...

运行时栈帧结构与方法调用

1 运行时栈帧结构 Java虚拟机以方法作为最基本执行单元&#xff0c;“栈帧”则是用于支持虚拟机进行方法调用和方法执行背后的数据结构。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。 1.1 局部变量表 局部变量表的容量以变量槽为最小单位。 Java…...

VSCode +gdb+gdbserver远程调试arm开发板

一、下载编译器 从ARM官网下载gcc-arm编译器&#xff0c;编译器中自带gdb和gdbserver&#xff0c;可以省去自己编译。 注&#xff1a;gdb是电脑端程序&#xff0c;gdbserver是arm开发板程序 arm官网链接&#xff1a;https://developer.arm.com/downloads/-/arm-gnu-toolchain-d…...

阿里云大学考试python中级题目及解析-python高级

阿里云大学考试python高级题目及解析 1.以上代码输出结果为 a [1,2,3,None,(),[],] print(len(a))A.4 B.5 C.6 D.syntax error C 列表中元素可以存储任意数据类型 2.将字符串s 中的字母a替换为字母&#xff0c;以下代码正确的是 A.s.swap(“b”&#xff0c;“a”) B.s.r…...

基于FPGA的车牌识别

基于FPGA进行车牌识别 基于FPGA进行车牌识别 1. 文件说明2. 程序移植说明3. 小小的编程感想 本项目的原理讲解视频已经上传到B站“基于FPGA进行车牌识别”。 本项目全部开源&#xff0c;见我本人的Github仓库“License-Plate-Recognition-FPGA”。 1. 文件说明 小技巧&…...

Qt - 进程/线程 补充进阶

Qt - 进程/线程 补充进阶 多线程quit / eixt / terminate QThread例子tdicethread 类.h.cpp widget 类.h.cpp 线程同步 多线程 quit / eixt / terminate quit 应用程序或线程安全的取消事件处理队列的执行&#xff0c;并随后使线程退出&#xff08;如果只希望结束线程并保证它…...

spring笔记

spring 和 springboot的区别 自动配置原理 beanFactory接口和ApplicationContext接口 两个都是 IOC 容器 ApplicationContext接口是BeanFactory接口实现类的子类 功能&#xff1a; ApplicationContext扩展BeanFactory BeanFactoryApplicationContext控制反转国际化支持 …...

最大熵模型

最大熵模型&#xff08;maximum entropy model&#xff09;由最大熵原理推导实现 最大熵原理 最大熵原理是概率模型学习的一个准则。最大熵原理认为&#xff0c;学习概率模型时&#xff0c;在所有可能的概率模型&#xff08;分布&#xff09;中&#xff0c;熵最大的模型时最好…...

微服务中网关的配置

一、添加 Spring Cloud Gateway 依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency>二、配置网关路由 在application.yaml中配置如下内容&#xff1a…...

Linux基本指令实现4及热键指令详解

目录 Linux热键补充&#xff1a; 1.bc指令&#xff1a; Tab键的智能补充&#xff1a; ctrlc键&#xff1a; uname指令&#xff1a; lscpu指令&#xff1a; lsmem指令&#xff1a; df -h指令&#xff1a; 关机指令&#xff1a; 扩展指令&#xff1a; Linux热键补充&#…...

系统调用与API

系统调用介绍 什么是系统调用 为了让应用程序有能力访问系统资源&#xff0c;也为了让程序借助操作系统做一些由操作系统支持的行为&#xff0c;每个操作系统都会提供一套接口&#xff0c;以供应用程序使用。系统调用涵盖的功能很广&#xff0c;有程序运行所必需的支持&#xf…...

OpenPCDet系列 | 5.4.1 DenseHead中的AnchorGenerator锚框生成模块

文章目录 AnchorGenerator模块AnchorGenerator.generate_anchors函数 AnchorGenerator模块 首先&#xff0c;根据点云场景将其划分为一个个grid&#xff0c;这个grid size是可以通过配置文件设定的点云场景方位和voxel大小计算出来的。 POINT_CLOUD_RANGE: [0, -39.68, -3, 6…...

【开发者指南】如何在MyEclipse中使用HTML或JSP设计器?(上)

MyEclipse v2022.1.0正式版下载 一、HTML & JSP 可视化设计器 本文简要介绍了 MyEclipse HTML 和 JSP Web 设计器的概念、功能和基本操作过程。这两个设计器具有相似的功能和相同的操作模型&#xff0c;但本文为专门针对其类型的内容。本文档中的示例是使用 MyEclipse HT…...

Node开发Web后台服务

简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型&#xff0c;使其轻量又高效。Node.js 的包管理器 npm&#xff0c;是全球最大的开源库生态系统。 能方便地搭建响应速度快、易于扩展的网络应用&#…...

Linux下对mmap封装使用

Linux下对mmap封装使用 1、mmap简介2、Linux下mmap使用介绍2.1、mmap函数2.2、munmap函数 3、对mmap进行封装4、对封装类MEM_MAP进行测试5、mmap原理6、源代码下载 1、mmap简介 mmap即memory map&#xff0c;是一种内存映射文件的技术。mmap可以将一个文件或者其它对象映射到进…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...