当前位置: 首页 > 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();
};

http://www.lryc.cn/news/69401.html

相关文章:

  • 数据建模方法论及实施步骤
  • AUTOSAR知识点 之 COM (一):基础知识
  • 自媒体品牌宣传策略注意哪些,是怎么种草的
  • 网络带宽管理
  • SpringCloud(27. Redis 和 ZK 分布式锁)
  • 运行时栈帧结构与方法调用
  • VSCode +gdb+gdbserver远程调试arm开发板
  • 阿里云大学考试python中级题目及解析-python高级
  • 基于FPGA的车牌识别
  • Qt - 进程/线程 补充进阶
  • spring笔记
  • 最大熵模型
  • 微服务中网关的配置
  • Linux基本指令实现4及热键指令详解
  • 系统调用与API
  • OpenPCDet系列 | 5.4.1 DenseHead中的AnchorGenerator锚框生成模块
  • 【开发者指南】如何在MyEclipse中使用HTML或JSP设计器?(上)
  • Node开发Web后台服务
  • Linux下对mmap封装使用
  • 深入了解云计算:发展历程、服务与部署模型、未来趋势与挑战
  • 使用乐鑫 Web IDE 助力物联网开发
  • Maven(5)---Maven的部署和发布
  • 内网渗透之权限维持-黄金白银票据隐藏账户远控-RustDeskGotoHTTP
  • 动态规划——带权活动选择
  • 软考A计划-真题-分类精讲汇总-第十八章(面向对象程序设计)
  • 【C++ 入坑指南】(09)数组
  • Vue.js
  • 博士毕业答辩流程 注意事项
  • 拼多多开放平台订单详情接口解析
  • 如何把ipa文件(iOS安装包)安装到iPhone手机上? 附方法汇总