当前位置:首页 > VUE

vue实现md编辑展示

2026-02-23 13:34:11VUE

Vue 实现 Markdown 编辑与展示

安装依赖

需要安装 markdown-itmarked 进行 Markdown 解析,以及 highlight.js 实现代码高亮。通过以下命令安装:

npm install markdown-it highlight.js

创建 Markdown 编辑器组件

使用 textarea 或第三方库(如 @toast-ui/editor)作为编辑区域,实时绑定数据:

<template>
  <div>
    <textarea v-model="markdownText" placeholder="输入Markdown内容"></textarea>
    <div v-html="compiledMarkdown" class="preview"></div>
  </div>
</template>

<script>
import markdownIt from 'markdown-it';
import hljs from 'highlight.js';

export default {
  data() {
    return {
      markdownText: '',
      md: markdownIt({
        highlight: (code, lang) => {
          if (lang && hljs.getLanguage(lang)) {
            return hljs.highlight(lang, code).value;
          }
          return hljs.highlightAuto(code).value;
        }
      })
    };
  },
  computed: {
    compiledMarkdown() {
      return this.md.render(this.markdownText);
    }
  }
};
</script>

<style>
/* 引入highlight.js主题 */
@import 'highlight.js/styles/github.css';
.preview {
  border: 1px solid #eee;
  padding: 10px;
}
</style>

使用第三方编辑器库

若需要更完整的编辑功能(如工具栏),可集成 @toast-ui/vue-editor

npm install @toast-ui/editor @toast-ui/vue-editor

组件示例:

<template>
  <Editor
    initialValue="初始内容"
    :options="{ hideModeSwitch: true }"
    @change="onChange"
  />
</template>

<script>
import { Editor } from '@toast-ui/vue-editor';
import '@toast-ui/editor/dist/toastui-editor.css';

export default {
  components: { Editor },
  methods: {
    onChange(content) {
      console.log(content);
    }
  }
};
</script>

安全注意事项

使用 v-html 渲染时需防范 XSS 攻击。可通过以下方式增强安全性:

  • 使用 DOMPurify 清理 HTML:
    npm install dompurify
  • 在计算属性中处理:
    import DOMPurify from 'dompurify';
    // ...
    compiledMarkdown() {
    return DOMPurify.sanitize(this.md.render(this.markdownText));
    }

自定义 Markdown 解析

通过 markdown-it 插件扩展功能,例如添加表格支持:

import markdownIt from 'markdown-it';
import markdownItTable from 'markdown-it-multimd-table';

const md = markdownIt().use(markdownItTable);

响应式预览

结合 CSS 实现分栏编辑与实时预览:

vue实现md编辑展示

.container {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 20px;
}
textarea {
  min-height: 300px;
  width: 100%;
}

标签: 编辑vue
分享给朋友:

相关文章

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…

vue 实现列表

vue 实现列表

Vue 实现列表的方法 在 Vue 中实现列表通常使用 v-for 指令,结合数组或对象数据渲染动态列表。以下是几种常见的实现方式: 基础列表渲染 使用 v-for 指令遍历数组,渲染列表项。ite…

vue拖拽实现

vue拖拽实现

Vue 拖拽实现方法 使用 HTML5 原生拖拽 API HTML5 提供了原生拖拽 API,可以通过 draggable 属性、dragstart、dragend、dragover 和 drop 事…

vue实现addclass

vue实现addclass

Vue 实现动态添加 class 的方法 在 Vue 中动态添加 class 可以通过多种方式实现,以下是常见的几种方法: 使用对象语法 通过绑定一个对象到 :class,可以动态切换 class…

vue 实现跳转

vue 实现跳转

Vue 实现页面跳转的方法 在 Vue 中实现页面跳转通常可以通过以下几种方式实现,具体选择取决于项目需求和技术栈(如是否使用 Vue Router)。 使用 Vue Router 进行编程式导航…

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简单…