当前位置:首页 > VUE

vue实现markdown

2026-01-12 19:57:45VUE

Vue 实现 Markdown 编辑器

在 Vue 中实现 Markdown 编辑器可以通过集成现有的库或自行构建。以下是几种常见的方法:

使用 marked 和 highlight.js

安装依赖:

npm install marked highlight.js

在 Vue 组件中引入并使用:

<template>
  <div>
    <textarea v-model="markdown" @input="updatePreview"></textarea>
    <div v-html="compiledMarkdown"></div>
  </div>
</template>

<script>
import marked from 'marked';
import hljs from 'highlight.js';
import 'highlight.js/styles/github.css';

marked.setOptions({
  highlight: function(code, lang) {
    if (lang && hljs.getLanguage(lang)) {
      return hljs.highlight(lang, code).value;
    }
    return hljs.highlightAuto(code).value;
  }
});

export default {
  data() {
    return {
      markdown: '# Hello Markdown',
      compiledMarkdown: ''
    }
  },
  mounted() {
    this.updatePreview();
  },
  methods: {
    updatePreview() {
      this.compiledMarkdown = marked(this.markdown);
    }
  }
}
</script>

使用 vue-markdown 组件

安装依赖:

npm install vue-markdown

在组件中使用:

<template>
  <div>
    <textarea v-model="markdown"></textarea>
    <vue-markdown :source="markdown"></vue-markdown>
  </div>
</template>

<script>
import VueMarkdown from 'vue-markdown';

export default {
  components: {
    VueMarkdown
  },
  data() {
    return {
      markdown: '# Hello Vue Markdown'
    }
  }
}
</script>

使用 Vditor(功能丰富的 Markdown 编辑器)

安装依赖:

npm install vditor

在 Vue 中使用:

<template>
  <div id="vditor"></div>
</template>

<script>
import Vditor from 'vditor';
import 'vditor/dist/index.css';

export default {
  mounted() {
    this.vditor = new Vditor('vditor', {
      height: 500,
      after: () => {
        this.vditor.setValue('# Hello Vditor');
      }
    });
  },
  beforeDestroy() {
    if (this.vditor) {
      this.vditor.destroy();
    }
  }
}
</script>

自定义 Markdown 解析器

如果需要更轻量级的解决方案,可以自行实现基本 Markdown 解析:

<template>
  <div>
    <textarea v-model="markdown" @input="parseMarkdown"></textarea>
    <div v-html="htmlOutput"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      markdown: '# Hello',
      htmlOutput: ''
    }
  },
  methods: {
    parseMarkdown() {
      this.htmlOutput = this.markdown
        .replace(/^# (.*$)/gm, '<h1>$1</h1>')
        .replace(/^## (.*$)/gm, '<h2>$1</h2>')
        .replace(/^### (.*$)/gm, '<h3>$1</h3>')
        .replace(/\*\*(.*)\*\*/g, '<strong>$1</strong>')
        .replace(/\*(.*)\*/g, '<em>$1</em>')
        .replace(/\n/g, '<br>');
    }
  },
  mounted() {
    this.parseMarkdown();
  }
}
</script>

集成 Monaco Editor 实现高级编辑

对于需要类似 VSCode 体验的 Markdown 编辑器:

npm install monaco-editor

Vue 组件实现:

<template>
  <div id="editor-container" style="height: 500px"></div>
</template>

<script>
import * as monaco from 'monaco-editor';

export default {
  mounted() {
    this.editor = monaco.editor.create(document.getElementById('editor-container'), {
      value: '# Markdown Editor',
      language: 'markdown',
      theme: 'vs-dark',
      minimap: { enabled: true }
    });
  },
  beforeDestroy() {
    this.editor.dispose();
  }
}
</script>

功能比较

  • marked + highlight.js:轻量级,适合简单需求
  • vue-markdown:Vue 专用,中等功能
  • Vditor:功能全面,包含预览、工具栏等
  • Monaco Editor:专业级编辑体验,适合复杂场景
  • 自定义解析器:完全控制,但功能有限

根据项目需求选择合适的方案,大多数情况下使用现成库更高效可靠。

vue实现markdown

标签: vuemarkdown
分享给朋友:

相关文章

vue实现菜单调用

vue实现菜单调用

Vue 实现动态菜单的常见方法 基于路由配置生成菜单 Vue Router 的路由配置可以天然转化为菜单结构,适合权限与路由绑定的系统: // router/index.js const rout…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取…

vue实现安全免登录

vue实现安全免登录

Vue 实现安全免登录的方案 免登录功能通常通过持久化认证状态(如 Token)实现,但需兼顾安全性。以下是基于 Vue 的常见实现方案: 基于 Token 的免登录 登录成功后存储 Toke…

vue实现视频会议

vue实现视频会议

使用 Vue 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:…

vue实现字母添加排序

vue实现字母添加排序

实现字母添加排序的方法 在Vue中实现字母添加排序功能,可以通过以下步骤完成: 创建Vue实例并定义数据 new Vue({ el: '#app', data: { lette…

vue实现微博发布动态

vue实现微博发布动态

使用Vue实现微博发布动态功能 创建Vue组件结构 新建一个WeiboPost.vue组件,包含文本框、图片上传和发布按钮: <template> <div class="w…