1056 字
约 3 分钟
0
md-editor-v3 入门:Vue 3 Markdown 编辑器

md-editor-v3 入门:Vue 3 Markdown 编辑器

给后台加一个「能写文章」的输入框:左边编辑、右边预览、带工具栏和图片上传——md-editor-v3 一个组件搞定。

它是什么

md-editor-v3 是 Vue 3 生态最完整的 Markdown 编辑器组件,本站写文章页用的就是它。能力清单:

  • 分屏实时预览:左侧编辑 Markdown 源码,右侧同步渲染
  • 工具栏:标题、加粗、列表、代码块、表格、链接等常用操作一键插入
  • 图片上传:贴图/选图后回调你的上传逻辑
  • 扩展语法:Mermaid 图表、KaTeX 数学公式、流程图、甘特图
  • 主题:亮/暗主题,预览样式可自定义
pnpm add md-editor-v3

基本用法

<script setup>
import { ref } from 'vue';
import { MdEditor } from 'md-editor-v3';
import 'md-editor-v3/lib/style.css';

const content = ref('# 开始写作\n\n这里是正文……');
</script>

<template>
  <MdEditor v-model="content" :style="{ height: '600px' }" />
</template>

v-model 绑定 Markdown 字符串——编辑器不关心你的存储和提交逻辑,它只负责「人机交互」,内容就是那个字符串。保存草稿、发布文章,拿到 content.value 走你自己的接口。

图片上传:对接 MinIO/OSS

编辑器内置的图片按钮默认只做「插入本地文件名」,真实项目要接管上传——通过 onUploadImg 回调:

<MdEditor
  v-model="content"
  :on-upload-img="onUploadImg"
/>

<script setup>
async function onUploadImg(files, callback) {
  // files 是 File 数组(支持一次贴多张图)
  const urls = await Promise.all(
    files.map((file) => uploadToMinio(file))   // 你的上传接口
  );
  // 把返回的 URL 列表交给编辑器,它会自动插入 Markdown
  callback(urls);
}
</script>

这个设计的巧妙处:上传逻辑完全解耦。你对接 MinIO、七牛、后端代理都行,编辑器只要求「给我一批 URL,我负责插进正文」。本站走的就是后端统一上传接口,图片落到 MinIO 再回填 URL。

常用配置速查

<MdEditor
  v-model="content"
  theme="dark"                    // 编辑器主题
  previewTheme="github"           // 预览区样式风格
  :toolbars="toolbars"            // 自定义工具栏按钮
  :footers="[]"                   // 去掉底部状态栏
  placeholder="开始创作……"
/>
// 定制工具栏:只留高频操作
const toolbars = [
  'bold', 'italic', 'strikeThrough', '-',
  'title', 'quote', 'unorderedList', 'orderedList', '-',
  'code', 'codeRow', 'image', 'table', '-',
  'preview',      // 预览开关
];

只需要纯预览(不编辑)的场景用 MdPreview 组件——轻量得多,没有工具栏和编辑区,适合展示已保存的 Markdown。

与后端渲染的一致性问题

一个容易忽略的坑:编辑器预览的渲染结果,和后端最终渲染的文章页面,可能不一致。两边如果用不同的 Markdown 解析器,某些扩展语法(任务列表、脚注、特定代码块样式)会呈现差异。

本站的做法是后端用 commonmark(带 GFM 表格、标题锚点等扩展)渲染正文,编辑器预览仅作为「写作时的近似参考」。发布后以前端最终渲染为准。这不完美但务实——要求两边逐像素一致的成本远超收益,只要核心语法(标题、列表、代码、表格、图片)表现一致即可。

性能与体验细节

自动保存配合 v-model 天然好做:

watch(content, debounce((v) => {
  localStorage.setItem('draft', v);      // 本地草稿兜底
}, 1000));

内容很长时(万字文章)编辑器内部有分块渲染优化,但工具栏操作仍可能略卡,这是所有「源码编辑 + 实时预览」模式的共性;关闭实时预览(点工具栏的预览开关)可立刻恢复流畅。

XSS 防御:Markdown 渲染是 HTML 注入的高危区(用户可写 <script>)。md-editor-v3 内部做了 sanitize,但如果你在自己的展示页另用渲染器,务必配置白名单过滤——这是安全底线不是可选项。

小结

md-editor-v3 的定位是「Vue 3 里最省事的完整编辑器」:v-model 接内容、onUploadImg 接上传、主题配置接视觉,一小时内就能做出生产级的写作页。用的时候记住两件事:上传逻辑是你自己的事,渲染一致性以服务端为准。

md-editor-v3 入门:Vue 3 Markdown 编辑器
http://www.clxhxhhr.top/posts/3718/
作者
clxstart
发布于
2026-09-25
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。