前端markdown编辑器vditor的使用

前言

最近项目需要重构知识库系统,经过了一些调研,跟群里的前端小伙伴讨论,以及去github对比了各种前端markdown插件的star数等,最终选择了高star,高下载量的vditor。

vditor的优点,用其官方的说法:"易于使用的 Markdown 编辑器,为适配不同的应用场景而生",简单来说就是功能比较全面,且不局限于特定的前端框架,vue,react甚至jquery都可以使用。

基本用法

我的项目是vue2.x的项目,所以本文主要介绍的vditor在vue2.x中的用法。

  • 安装依赖

    npm install vditor --save

  • 在代码中引入并初始化对象,这里介绍局部引入的方式,在某个vue组件里面引入,分别引入vditor和样式文件。

    import Vditor from 'vditor'

    import 'vditor/dist/index.css' 或者按照官方写的方式 import "~vditor/src/assets/less/index"

    初始化

    const vditor = new Vditor(id, {options...})

  • 具体使用例子

    javascript 复制代码
      <div id="markdownDocument" />
       const wikiContent = '' // 这里就是要展示的文章,一般从后端接口获取
       const editDocument = document.getElementById('markdownDocument')
       this.articleEditor = new Vditor(editDocument, {
                height: 600,
                mode: 'sv',
                preview: {
                  theme: {
                    // 设置内容主题
                    current: 'classic'
                  },
                  hljs: {
                    // 设置代码块主题
                    style: 'dracula'
                  },
                  actions: []
                },
                toolbarConfig: {
                  pin: true
                },
                upload: {
                  url: `article/uploadImage`,
                  accept: 'image/*',
                  fieldName: 'file',
                  token: 'test',
                  multiple: false,
                  filename(name) {
                    return name.replace(/[^(a-zA-Z0-9\u4e00-\u9fa5\.)]/g, '')
                      .replace(/[\?\\/:|<>\*\[\]\(\)\$%\{\}@~]/g, '')
                      .replace('/\\s/g', '')
                  },
                  format(files, responseText) {
                    const res = JSON.parse(responseText)
                    const name = files[0].name
                    const url = res.data
                    const result = JSON.stringify({
                      code: 0,
                      data: { errFiles: '', succMap: { [name]: url }}
                    })
                    return result
                  }
                  // success(ele, msg) {
                  //   // console.log(msg)
                  // },
                  // error(ele, msg) {
                  //   console.log(ele)
                  //   console.log(msg)
                  // }
                },
                toolbar: [
                  'emoji', 'headings', 'bold', 'italic', 'strike', '|', 'line', 'quote', 'list', 'ordered-list',
                  'check', 'outdent', 'indent', 'code', 'inline-code', 'insert-after', 'insert-before', 'undo',
                  'redo', { name: 'upload', tip: '上传图片' }, 'link', 'table', 'edit-mode', 'both', 'preview', 'fullscreen',
                  'outline', 'code-theme', 'export', 'devtools', 'br'
                ],
                cache: {
                  enable: false
                },
                after: () => {
                // 这里给markdown编辑器设置文章内容
                  this.articleEditor.setValue(wikiContent)
                }
              })

是不是比较熟悉,跟echarts的用法比较类似。定义一个容器,获取容器dom,然后添加相关的option。通过mode设置三种编辑模式:所见即所得(wysiwyg)、即时渲染(ir)、分屏预览(sv)。toolbar用于设置需要的功能区的功能。可以根据自己的需要做一些个性化的配置,上方的实例以文件上传为例,如果我们要限制只能上传图片,就可以自定义这边的工具栏的工具名称为上传图片{ name: 'upload', tip: '上传图片' },具体上传参数还需要在upload属性中配置。

具体的Option的配置参数这里就不多做介绍,可以查看官方文档ld246.com/article/154...

  • 只需要查看,不需要编辑markdown的写法

    我们实际的开发中,可能不光有要编辑的场景,可能还有只需要根据后端接口返回数据,展示markdown文章的场景。vditor有两种实现方式:方式一通过引入'vditor/dist/method.min'包的方式;方式二通过md2html(mdText: string, options?: IPreviewOptions)方法。我用的是第一种,引入 'vditor/dist/method.min'的方式。具体示例如下:

    javascript 复制代码
    import VditorPreview from 'vditor/dist/method.min'
    php 复制代码
     <div id="viewDoc" ref="viewDoc" />
     const content = '# 标题 正文' // 这里后端接口返回markdown文章,就是那种'# 标题,**加粗**'的这种markdown语法的文章
     const viewDoc = document.getElementById('viewDoc')
     VditorPreview.preview(viewDoc, content, {
        theme: {
          current: 'light'
        },
        hljs: {
          style: 'github'
        }
      })

    theme设置主题,默认"light",可选项有{ "ant-design": "Ant Design", dark: "Dark", light: "Light", wechat: "WeChat" },hljs设置代块样式。 第二种方式Vditor.md2html具体可以参考下官方文档,这里不做详细介绍了。

总结

vditor还是现在的markdown插件中比较优秀的,下载量已经超越了前辈Editor.md。如果实际项目有markdown的嵌入需求,推荐可以使用vditor。以上只是介绍了一些基础的用法,还有一些高级用法,这里粘贴下官方介绍(附上官方地址:ld246.com/tag/vditor)...

  • 支持三种编辑模式:所见即所得(wysiwyg)、即时渲染(ir)、分屏预览(sv)

  • 支持大纲、数学公式、脑图、图表、流程图、甘特图、时序图、五线谱、多媒体、语音阅读、标题锚点、代码高亮及复制、graphviz 渲染、plantumlUML 图

  • 导出、图片懒加载、任务列表、多平台预览、多主题切换、复制到微信公众号/知乎功能

  • 实现 CommonMark 和 GFM 规范,可对 Markdown 进行格式化和语法树查看,并支持 10+ 项配置

  • 工具栏包含 36+ 项操作,除支持扩展外还可对每一项中的快捷键、提示、提示位置、图标、点击事件、类名、子工具栏进行自定义

  • 表情/at/话题等自动补全扩展

  • 可使用拖拽、剪切板粘贴上传,显示实时上传进度,支持 CORS 跨域上传

  • 实时保存内容,防止意外丢失

  • 录音支持,用户可直接发布语音

  • 粘贴 HTML 自动转换为 Markdown,如粘贴中包含外链图片可通过指定接口上传到服务器

  • 支持主窗口大小拖拽、字符计数

  • 多主题支持,内置黑白绿三套主题

  • 多语言支持,内置中、英、韩文本地化

  • 支持主流浏览器,对移动端友好

相关推荐
崔庆才丨静觅11 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby606111 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了12 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅12 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅12 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅12 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment12 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅13 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊13 小时前
jwt介绍
前端
爱敲代码的小鱼13 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax