当前位置:首页 > VUE

vue实现markdown

2026-01-07 18:54:51VUE

Vue 实现 Markdown 编辑器

在 Vue 中实现 Markdown 编辑器可以通过集成第三方库或自定义解析器完成。以下是两种常见方法:

使用第三方库(如 marked 或 markdown-it)

安装依赖库:

npm install marked markdown-it

在 Vue 组件中使用:

<template>
  <div>
    <textarea v-model="markdownText"></textarea>
    <div v-html="compiledMarkdown"></div>
  </div>
</template>

<script>
import { marked } from 'marked'; // 或使用 markdown-it

export default {
  data() {
    return {
      markdownText: '# Hello World'
    };
  },
  computed: {
    compiledMarkdown() {
      return marked(this.markdownText);
    }
  }
};
</script>

自定义解析器(基础实现)

如果需要轻量级解决方案,可以手动解析部分 Markdown 语法:

<template>
  <div>
    <textarea v-model="markdownText"></textarea>
    <div>{{ parsedMarkdown }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      markdownText: ''
    };
  },
  computed: {
    parsedMarkdown() {
      return this.markdownText
        .replace(/^# (.*$)/gm, '<h1>$1</h1>')
        .replace(/^\* (.*$)/gm, '<li>$1</li>');
    }
  }
};
</script>

高级功能集成

语法高亮

配合 highlight.js 实现代码高亮:

npm install highlight.js

在 marked 中配置:

import hljs from 'highlight.js';

marked.setOptions({
  highlight: function(code, lang) {
    return hljs.highlight(lang || 'plaintext', code).value;
  }
});

实时预览

通过拆分组件实现双栏编辑:

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

<style>
.editor-container {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
}
</style>

安全注意事项

使用 v-html 时需防范 XSS 攻击:

import DOMPurify from 'dompurify';

// 在 computed 中处理
compiledMarkdown() {
  return DOMPurify.sanitize(marked(this.markdownText));
}

完整组件示例

结合所有功能的完整组件:

<template>
  <div class="markdown-editor">
    <div class="toolbar">
      <button @click="insertHeader">H1</button>
      <button @click="insertCode">Code</button>
    </div>
    <textarea ref="editor" v-model="markdownText"></textarea>
    <div class="preview" v-html="compiledMarkdown"></div>
  </div>
</template>

<script>
import { marked } from 'marked';
import DOMPurify from 'dompurify';
import hljs from 'highlight.js';

marked.setOptions({
  highlight: (code, lang) => 
    hljs.highlight(lang || 'plaintext', code).value
});

export default {
  data() {
    return {
      markdownText: ''
    };
  },
  computed: {
    compiledMarkdown() {
      return DOMPurify.sanitize(marked(this.markdownText));
    }
  },
  methods: {
    insertHeader() {
      this.markdownText += '\n# Header\n';
      this.$refs.editor.focus();
    },
    insertCode() {
      this.markdownText += '\n```js\n// code here\n```\n';
    }
  }
};
</script>

vue实现markdown

标签: vuemarkdown
分享给朋友:

相关文章

vue实现文档

vue实现文档

Vue 实现文档的方法 在 Vue 中实现文档功能可以通过多种方式,包括使用富文本编辑器、Markdown 解析或直接渲染 HTML。以下是几种常见的实现方法。 使用富文本编辑器 富文本编辑器如 T…

vue实现多层评论回复

vue实现多层评论回复

Vue 实现多层评论回复 数据结构设计 多层评论通常采用嵌套结构,每个评论对象包含子评论数组。示例数据结构如下: comments: [ { id: 1, content: '…

vue实现压缩上传文件

vue实现压缩上传文件

压缩上传文件的实现方法 在Vue中实现文件压缩和上传功能,可以通过以下步骤完成。该方法结合了前端文件压缩库和HTTP请求,确保文件在上传前被有效压缩。 安装必要的依赖 需要使用compressorj…

vue实现收起展开面板

vue实现收起展开面板

实现收起展开面板的方法 在Vue中实现收起展开面板功能可以通过多种方式完成,以下是几种常见的实现方法: 使用v-show或v-if控制显示隐藏 利用Vue的指令可以轻松实现面板的展开和收起:…

vue手写签名如何实现

vue手写签名如何实现

实现手写签名的基本思路 在Vue中实现手写签名功能,通常需要借助HTML5的Canvas API来捕获用户的绘制操作。核心流程包括初始化画布、监听触摸/鼠标事件、记录轨迹以及生成签名图片。 安装依…

vue实现多选题

vue实现多选题

Vue实现多选题的方法 使用Vue实现多选题功能,可以通过v-model绑定数组、动态渲染选项、以及处理选中状态来实现。以下是一个完整的实现示例: 基础实现代码 <template>…