编程 使用Vue3和marked库实现一个基础的Markdown编辑器

2024-11-18 17:01:21 +0800 CST views 1028

实现一个基础的 Markdown 编辑器:Vue 3 与富文本解析

简介

在现代网页开发中,Markdown 已经成为一种广泛使用的轻量级标记语言,它以简洁明了的语法让用户能够快速创建格式化文本。随着 Vue 3 的推出,利用其 Composition API(即 setup 语法糖)来构建一个简单的 Markdown 编辑器变得更加高效。本文将介绍如何结合 Vue 3 和富文本解析库,来实现一个基础的 Markdown 编辑器。

项目结构

我们首先要规划项目的基本结构,通常我们可以这样组织:

markdown-editor/
├── public/
│   └── index.html
└── src/
    ├── components/
    │   └── MarkdownEditor.vue
    ├── App.vue
    ├── main.js
    └── styles.css

安装依赖

使用 Vue CLI 创建新项目后,我们需要安装一个 Markdown 解析器,比如 marked,它可以将 Markdown 文本转换为 HTML。可以通过以下命令安装:

npm install marked

创建 MarkdownEditor 组件

接下来,我们在 src/components/MarkdownEditor.vue 中创建我们的 Markdown 编辑器组件。

<template>
  <div class="markdown-editor">
    <textarea v-model="markdownText" placeholder="输入Markdown文本..."></textarea>
    <div v-html="renderedHtml" class="preview"></div>
  </div>
</template>

<script setup>
import { ref, computed } from 'vue';
import { marked } from 'marked';

// 定义一个响应式变量来存储Markdown文本
const markdownText = ref('');

// 使用computed属性来处理Markdown文本并转换成HTML
const renderedHtml = computed(() => {
  return marked(markdownText.value, { 
    gfm: true, // 使用Github Flavored Markdown
    breaks: true // 开启换行
  });
});
</script>

<style scoped>
.markdown-editor {
  display: flex;
  flex-direction: column;
  gap: 20px;
}

textarea {
  width: 100%;
  height: 200px;
  padding: 10px;
  font-family: monospace;
  font-size: 14px;
}

.preview {
  border: 1px solid #ccc;
  padding: 10px;
  border-radius: 4px;
  background-color: #f9f9f9;
  min-height: 200px;
  overflow-y: auto;
}
</style>

代码解析

  • Template部分:我们使用一个 <textarea> 来输入 Markdown 文本,同时用一个 <div> 来展示解析后的 HTML 内容。v-html 指令将绑定 computed 属性 renderedHtml,实现 Markdown 到 HTML 的转换。

  • Script部分

    • 使用 setup 语法糖引入 refcomputed,来处理状态和计算属性。
    • markdownText:用 ref 创建一个响应式变量,初始化为空字符串,作为用户输入的 Markdown 文本。
    • renderedHtmlcomputed 属性,用于实时将输入的 Markdown 文本转为 HTML。
  • Style部分:简单的样式,保证编辑器区域看起来整洁,并且实现一定的响应性。

应用 MarkdownEditor

在我们的主文件 src/App.vue 中引入并使用刚创建的 MarkdownEditor 组件:

<template>
  <div id="app">
    <h1>Markdown 编辑器</h1>
    <MarkdownEditor />
  </div>
</template>

<script setup>
import MarkdownEditor from './components/MarkdownEditor.vue';
</script>

<style>
#app {
  width: 80%;
  margin: 0 auto;
  font-family: Avenir, Helvetica, Arial, sans-serif;
}
</style>

代码解析

我们使用 MarkdownEditor 组件,并给出一个简单的标题,整个应用看起来简约明了,便于使用。

运行项目

在项目目录下运行以下命令启动开发服务器:

npm run serve

访问 http://localhost:8080 可以看到我们的 Markdown 编辑器。您可以在 <textarea> 中输入 Markdown 文本,例如:

# 这是一个标题
## 这是一个二级标题
这是一些普通的文本,**加粗文本**,*斜体文本*。
- 列表项1
- 列表项2

[这是一个链接](https://www.example.com)

输入后,在下方的预览区域将实时显示渲染后的结果。

总结

在本文中,我们使用 Vue 3 的 setup 语法糖和 marked 库,创建了一个简单的 Markdown 编辑器。通过这样的方式,不仅简化了代码逻辑,还提升了代码的可读性和重用性。

复制全文 生成海报 前端开发 Vue Markdown 编程 Web应用

推荐文章

CSS 媒体查询
2024-11-18 13:42:46 +0800 CST
filecmp,一个Python中非常有用的库
2024-11-19 03:23:11 +0800 CST
Python Invoke:强大的自动化任务库
2024-11-18 14:05:40 +0800 CST
你可能不知道的 18 个前端技巧
2025-06-12 13:15:26 +0800 CST
动态渐变背景
2024-11-19 01:49:50 +0800 CST
Vue3中的虚拟滚动有哪些改进?
2024-11-18 23:58:18 +0800 CST
mysql int bigint 自增索引范围
2024-11-18 07:29:12 +0800 CST
解决python “No module named pip”
2024-11-18 11:49:18 +0800 CST
php使用文件锁解决少量并发问题
2024-11-17 05:07:57 +0800 CST
Golang 中你应该知道的 noCopy 策略
2024-11-19 05:40:53 +0800 CST
Rust 与 sqlx:数据库迁移实战指南
2024-11-19 02:38:49 +0800 CST
html折叠登陆表单
2024-11-18 19:51:14 +0800 CST
PHP 命令行模式后台执行指南
2025-05-14 10:05:31 +0800 CST
Vue 中如何处理父子组件通信?
2024-11-17 04:35:13 +0800 CST
全栈利器 H3 框架来了!
2025-07-07 17:48:01 +0800 CST
7种Go语言生成唯一ID的实用方法
2024-11-19 05:22:50 +0800 CST
快手小程序商城系统
2024-11-25 13:39:46 +0800 CST
html一些比较人使用的技巧和代码
2024-11-17 05:05:01 +0800 CST
JavaScript设计模式:适配器模式
2024-11-18 17:51:43 +0800 CST
纯CSS实现3D云动画效果
2024-11-18 18:48:05 +0800 CST
2025年,小程序开发到底多少钱?
2025-01-20 10:59:05 +0800 CST
程序员茄子在线接单