当前位置:首页 > 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 组件

安装依赖:

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 中使用:

vue实现markdown

<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:专业级编辑体验,适合复杂场景
  • 自定义解析器:完全控制,但功能有限

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

标签: vuemarkdown
分享给朋友:

相关文章

vue调用接口实现退出

vue调用接口实现退出

实现Vue退出功能的步骤 在Vue中调用接口实现退出功能通常需要与后端API交互,以下是实现方法: 前端实现 创建退出方法,调用后端API接口: methods: { logout() {…

vue实现suspense

vue实现suspense

Vue 3 中实现 Suspense Suspense 是 Vue 3 引入的一个内置组件,用于处理异步依赖的加载状态。它允许在等待异步组件或异步数据加载时显示一个后备内容(fallback),直到异…

vue实现试卷

vue实现试卷

Vue实现试卷系统的基本思路 使用Vue.js构建试卷系统需要结合组件化开发、状态管理和后端数据交互。核心功能包括题目展示、答题逻辑、计时器和提交答案。 核心功能模块划分 试卷组件结构 试卷容器组…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show 通过…

vue 菜单实现

vue 菜单实现

Vue 菜单实现方法 在Vue中实现菜单功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-for动态生成菜单 通过数据驱动的方式动态渲染菜单项,适合菜单内容可能变化的场景: <t…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。…