当前位置:首页 > VUE

vue实现markdown

2026-03-27 12:28:43VUE

Vue 实现 Markdown 编辑器/渲染器

在 Vue 中实现 Markdown 功能通常需要结合第三方库或自定义解析器。以下是几种常见方法:

使用 marked.js 库

marked.js 是一个轻量级的 Markdown 解析器,可以快速将 Markdown 转换为 HTML。

安装依赖:

npm install marked

在 Vue 组件中使用:

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

<script>
import { marked } from 'marked';

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

使用 vue-markdown 组件

vue-markdown 是一个专门为 Vue 设计的 Markdown 组件。

安装:

npm install vue-markdown

使用示例:

<template>
  <vue-markdown :source="markdownText" />
</template>

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

export default {
  components: {
    VueMarkdown
  },
  data() {
    return {
      markdownText: '# Vue Markdown Component\n\nThis is bold text.'
    };
  }
};
</script>

使用 highlight.js 添加代码高亮

结合 marked.js 和 highlight.js 可以实现代码语法高亮。

安装依赖:

npm install marked highlight.js

配置示例:

import { marked } from 'marked';
import hljs from 'highlight.js';

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

自定义 Markdown 解析器

对于简单需求,可以创建自定义解析器:

const simpleMarkdown = (text) => {
  return text
    .replace(/^# (.*$)/gm, '<h1>$1</h1>')
    .replace(/^## (.*$)/gm, '<h2>$1</h2>')
    .replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>')
    .replace(/\*(.*?)\*/g, '<em>$1</em>');
};

注意事项

  1. 使用 v-html 时要注意 XSS 安全问题,确保内容可信或进行过滤
  2. 对于复杂 Markdown 需求,推荐使用专业库如 marked.js 或 remark
  3. 编辑器功能可以考虑使用 CodeMirror 或 Monaco Editor 集成
  4. 性能优化:对于大量 Markdown 内容,考虑使用虚拟滚动

完整编辑器示例

结合 marked.js 和 CodeMirror 创建完整编辑器:

vue实现markdown

<template>
  <div class="editor-container">
    <textarea ref="editor"></textarea>
    <div class="preview" v-html="compiledMarkdown"></div>
  </div>
</template>

<script>
import { marked } from 'marked';
import CodeMirror from 'codemirror';
import 'codemirror/mode/markdown/markdown';
import 'codemirror/lib/codemirror.css';

export default {
  data() {
    return {
      markdownContent: '# Markdown Editor\n\nType here...',
      compiledMarkdown: ''
    };
  },
  mounted() {
    this.editor = CodeMirror.fromTextArea(this.$refs.editor, {
      mode: 'markdown',
      lineNumbers: true,
      value: this.markdownContent
    });

    this.editor.on('change', (cm) => {
      this.markdownContent = cm.getValue();
      this.compiledMarkdown = marked(this.markdownContent);
    });

    this.compiledMarkdown = marked(this.markdownContent);
  }
};
</script>

<style>
.editor-container {
  display: flex;
  height: 100vh;
}
.preview {
  flex: 1;
  padding: 20px;
  overflow-y: auto;
}
.CodeMirror {
  flex: 1;
  height: 100%;
}
</style>

标签: vuemarkdown
分享给朋友:

相关文章

vue实现类别

vue实现类别

Vue 实现类别的几种方法 在 Vue 中实现类别功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-bind:class 动态绑定类名 通过对象语法或数组语法动态绑定类名,根据条件添加或移…

vue 实现单选

vue 实现单选

使用 v-model 绑定单选值 在 Vue 中,可以通过 v-model 绑定单选按钮的值。定义一个响应式数据(如 selectedOption),并将其与单选按钮的 value 属性关联。…

vue键盘实现

vue键盘实现

监听键盘事件 在Vue中监听键盘事件可以通过v-on指令或@缩写实现。常见的键盘事件包括keydown、keyup和keypress。例如监听回车键事件: <template> &l…

轮播vue实现

轮播vue实现

使用 Vue 实现轮播功能 基础轮播实现 安装依赖(如使用 Swiper): npm install swiper vue-awesome-swiper 组件代码示例: <template&…

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

vue实现keepalive

vue实现keepalive

Vue 中实现 keep-alive 在 Vue 中,keep-alive 是一个内置组件,用于缓存动态组件或组件的状态,避免重复渲染和销毁。以下是实现 keep-alive 的几种方法: 基本用法…