当前位置:首页 > VUE

vue实现markdown

2026-03-07 03:01:36VUE

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) {
    return hljs.highlightAuto(code, [lang]).value;
  }
});

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

使用 vue-markdown 插件

安装插件:

npm install vue-markdown

在组件中使用:

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: ''
    };
  }
};
</script>

使用 tiptap 编辑器

安装依赖:

npm install @tiptap/vue-2 @tiptap/starter-kit @tiptap/extension-document @tiptap/extension-paragraph @tiptap/extension-text @tiptap/extension-bold @tiptap/extension-code @tiptap/extension-italic

组件实现:

<template>
  <div>
    <editor-content :editor="editor" />
  </div>
</template>

<script>
import { Editor, EditorContent } from '@tiptap/vue-2'
import StarterKit from '@tiptap/starter-kit'

export default {
  components: {
    EditorContent,
  },
  data() {
    return {
      editor: null,
    }
  },
  mounted() {
    this.editor = new Editor({
      content: '',
      extensions: [
        StarterKit,
      ],
    })
  },
  beforeDestroy() {
    this.editor.destroy()
  },
}
</script>

自定义 Markdown 解析器

如果需要完全自定义实现,可以创建解析函数:

vue实现markdown

function customMarkdownParser(text) {
  // 替换标题
  text = text.replace(/^# (.*$)/gm, '<h1>$1</h1>');
  // 替换粗体
  text = text.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
  // 替换代码块
  text = text.replace(/```([\s\S]*?)```/g, '<pre><code>$1</code></pre>');
  return text;
}

在 Vue 组件中使用:

<template>
  <div>
    <textarea v-model="markdown"></textarea>
    <div v-html="parsedMarkdown"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      markdown: '',
    };
  },
  computed: {
    parsedMarkdown() {
      return customMarkdownParser(this.markdown);
    }
  }
};
</script>

样式优化

为 Markdown 输出添加基本样式:

.markdown-output h1 {
  font-size: 2em;
  margin: 0.67em 0;
}
.markdown-output pre {
  background: #f4f4f4;
  padding: 10px;
  border-radius: 5px;
}
.markdown-output code {
  font-family: monospace;
}

功能扩展

添加工具栏和更多 Markdown 功能:

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

<script>
export default {
  methods: {
    insertHeader() {
      this.markdown += '\n# Header\n';
      this.$refs.editor.focus();
    },
    insertBold() {
      this.markdown += ' bold text ';
      this.$refs.editor.focus();
    },
    insertCode() {
      this.markdown += '\n```\ncode block\n```\n';
      this.$refs.editor.focus();
    }
  }
};
</script>

以上方法提供了从简单到复杂的多种实现方案,可根据项目需求选择合适的方案。

标签: vuemarkdown
分享给朋友:

相关文章

vue 实现闪烁

vue 实现闪烁

Vue 实现闪烁效果的方法 方法一:使用 CSS 动画 在 Vue 组件中定义一个闪烁的 CSS 动画,通过绑定 class 或 style 来控制元素的闪烁效果。 <template>…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现复选

vue实现复选

Vue 实现复选框 在 Vue 中实现复选框可以通过 v-model 指令绑定数据,同时结合 input 元素的 type="checkbox" 属性来实现。以下是几种常见的实现方式: 单个复选框…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…

vue实现模块

vue实现模块

Vue 实现模块化的方法 Vue 支持多种模块化开发方式,可以根据项目需求选择适合的方案。 使用单文件组件(SFC) 单文件组件是 Vue 最常用的模块化方式,将模板、脚本和样式封装在一个 .vue…

tabbar 实现 vue

tabbar 实现 vue

在 Vue 中实现 TabBar 功能可以通过多种方式完成,以下是几种常见的方法: 使用 Vue Router 结合自定义组件 创建一个自定义的 TabBar 组件,结合 Vue Router 实现…