You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nuxt 3 Content 2的MDC中从YAML输出标准Markdown/HTML?

解决Nuxt 3 Content 2组件中YAML多行文本渲染问题

问题原因

你通过MDC YAML传递的copy是带换行的字符串,但Vue的双大括号{{ }}会将所有空白(包括换行)合并为单个空格,导致内容显示为单行。同时,你尝试的<slot>和<ContentSlot>方法不适用,因为copy是组件props而非MDC插槽内容。

解决方案:解析Markdown渲染多行文本

Nuxt Content 2内置了Markdown解析工具,可直接将带换行的字符串解析为HTML段落:

1. 修改组件脚本

在组件的<script setup>中引入并使用Nuxt Content的Markdown解析器:

<script setup>
import { useMarkdownParser } from '#content/utils'
import { computed } from 'vue'

const props = defineProps({
    title: { type: String },
    copy: { type: String },
    media: { type: Object },
    link: { type: Object }
})

// 解析copy为HTML
const parseMarkdown = useMarkdownParser()
const parsedCopy = computed(() => parseMarkdown(props.copy))
</script>

2. 修改模板渲染

将原来的{{ copy }}替换为v-html绑定解析后的内容:

<div class="prose prose-xl lg:prose-2xl leading-normal lg:leading-snug italic max-w-none" v-html="parsedCopy"></div>

效果说明

YAML中用空行分隔的段落会被自动解析为<p>标签,换行也会被正确处理,同时保留你设置的prose类样式。

备选方案:仅转换换行为<br>

如果不需要Markdown解析,只是要保留换行,可直接将字符串中的换行符替换为<br>:

<script setup>
import { computed } from 'vue'

const props = defineProps({
    // ... 其他props
})

const formattedCopy = computed(() => props.copy.replace(/\n/g, '<br>'))
</script>

<!-- 模板中 -->
<div class="..." v-html="formattedCopy"></div>

内容的提问来源于stack exchange,提问作者kb.works

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:45:46