基于mdEditor实现数据的存储和回显(导出pdf&表情包&目录)

背景

最近在写基于Vue + SpringBoot的毕业设计,需要用到发布文章这一模块,就需要用到文本编辑器,找来找去,发现了这个mdEditor。

效果

数据的编辑

代码

javascript 复制代码
import { ref } from 'vue'
import 'md-editor-v3/lib/style.css'
import { MdEditor } from 'md-editor-v3'
import 'md-editor-v3/lib/style.css'
import { Emoji } from '@vavt/v3-extension'
import '@vavt/v3-extension/lib/asset/Emoji.css'
import { ExportPDF } from '@vavt/v3-extension'
import '@vavt/v3-extension/lib/asset/ExportPDF.css'
html 复制代码
      <!-- 文章内容 -->
      <div class="editor-wrapper">
        <MdEditor
            ref="editorRef"
            v-model="params.content"
            :toolbars="toolbars"
            :height="1000"
            :placeholder="placeholder"
            :theme="theme"
            :language="lang"
            :code-theme="codeTheme"
            @onUploadImg="handleUploadImage"
            @save="handleSave"
            :hotkeys="customHotkeys"
            showToolbarName
            style="min-height: 600px; height: auto;"
            :image-auto-preview="true">
          <!-- 自定义工具栏:文字居中、导出PDF、Emoji -->
          <template #defToolbars>
            <ExportPDF :modelValue="params.content" />
            <Emoji>
              <template #trigger>😀</template>
            </Emoji>
          </template>
        </MdEditor>
      </div>

工具栏扩展

https://github.com/imzbf/md-editor-extension/tree/develop/packages/v3/components

文档API

API - MdEditorV3 使用文档

数据的回显

数据的回显对我来说是一个很头痛的问题。

存在后端数据库里面的数据格式是markdown形式的,前端在进行渲染的时候,可以通过很多的方式,但总会少点啥(代码不高亮 流程图解析不出来) ,解铃还须系铃人。 (用mdEditor 进行回显**)**

代码

html 复制代码
<script setup lang="ts">
/*------------- 导包 ------------------------*/
import {computed, ref} from 'vue';
import { MdEditor } from 'md-editor-v3';
import 'md-editor-v3/lib/style.css';
import {Emoji, ExportPDF} from "@vavt/v3-extension"; // 导出为PDF

/*------------- 数据 ------------------------*/
const props = defineProps<{
  mdText: string;                // 原始 Markdown 内容
  theme?: 'light' | 'dark';       // 主题(默认 light)
  language?: string;              // 界面语言(默认 zh-CN)
  codeTheme?: string;             // 代码高亮主题(如 'atom'、'github')
}>();
const content = computed(() => props.mdText);
const toolbars = [0,
  '=',  // 右侧区域开始
  'catalog'
]
const editorRef = ref(null)

/*------------- 方法 ------------------------*/
</script>

<template>
  <MdEditor
      ref="editorRef"
      v-model="content"
      :previewOnly="true"
      :theme="theme"
      :language="language"
      :codeTheme="codeTheme"
      :toolbars="toolbars"
      :showCodeRowNumber="true"
      showToolbarName
      readOnly
      style="height: 100%"
      inputBoxWidth="0">
    <!-- 自定义工具栏:文字居中、导出PDF、Emoji -->
    <template #defToolbars>
      <ExportPDF :modelValue="content" />
    </template>

  </MdEditor>
</template>


<style scoped>

</style>

想法

给前端展示的时候,也是通过mdEditor编辑界面,只不过:禁止修改(readOnly) && 修改框长度为0(inputBoxWidth="0")&& 工具栏只显示 打印为pdf和显示目录

javascript 复制代码
const toolbars = [
    0, // 0是占位的 这里表示的是打印为pdf
  '=',  // 右侧区域开始
  'catalog'
]

效果

不足

可以通过这个进行拖拽,得到原始的markdown数据,但是无法修改。

解决问题😄

文档里面居然有仅预览

示例 - MdEditorV3 使用文档

javascript 复制代码
<template>
      <!-- 目录 -->
      <MdCatalog :editorId="id" :scrollElement="scrollElement" />
      <!-- 文章内容 -->
      <MdPreview :id="id" :modelValue="article.content" />
</template>

<script setup>
import { ref } from 'vue';
import { MdPreview, MdCatalog } from 'md-editor-v3';
// preview.css相比style.css少了编辑器那部分样式
import 'md-editor-v3/lib/preview.css';

const id = 'preview-only';
const text = ref('# Hello Editor');
const scrollElement = document.documentElement;
</script>

最后

祝大家新年快乐!!!

相关推荐
SuperEugene3 小时前
数组查找与判断:find / some / every / includes 的正确用法
前端·javascript
phltxy3 小时前
Vue进阶实战:自定义指令与插槽的核心用法及实战案例
前端·javascript·vue.js
Never_Satisfied4 小时前
在JavaScript / HTML中,触发某个对象的click事件
开发语言·javascript·html
许同4 小时前
JS-WPS 自动化办公(5)多Sheet整合
开发语言·前端·javascript
_OP_CHEN4 小时前
【前端开发之JavaScript】(四)JS基础语法下篇:函数与对象核心要点深度解析
开发语言·前端·javascript·界面开发·前端开发·网页开发·语法基础
强子感冒了4 小时前
JavaScript学习笔记:函数、方法与继承(原型与class)
javascript·笔记·学习
打瞌睡的朱尤12 小时前
Vue day10 完整购物网页(登录页,首页,搜索)
前端·javascript·vue.js
扶苏100214 小时前
深入理解 Vue 3 的 watchEffect
前端·javascript·vue.js
yanlele16 小时前
AI Coding 时代下, 关于你会写代码这件事儿, 还重要吗?
前端·javascript·ai编程