2

我在我的应用程序中使用了 nuxt / content 并且运行良好。在应用程序的另一部分,我想从数据库中获取一些降价并显示它。

let mytext = "Some *markdown* fetched from a db here."

<nuxt-content :document="mytext" />

这不起作用,因为我缺少解析步骤;当您这样做时,$content("a_page_title_here").fetch()它会解析获取的文本并将其作为结构化 json 呈现给组件。

如何使用$content来解析文本,以便将其传递给组件进行显示?

我敢打赌有办法做到这一点,但文档不包含描述您可以使用的所有内容的参考部分$content

如果有使用底层 Remark 组件的简单方法,我可以做到。

4

2 回答 2

4

您可以使用Markdown来自@nuxt/content. 它的asynctoJSON()函数采用包含 Markdown 的文件名或字符串(通过gray-matter)进行解析,并解析可以传递给的 JSON 对象<nuxt-content>.document

Markdown要使用默认rehype插件进行初始化,请使用getDefaults()processMarkdownOptions()

// ~/utils/parseMarkdown.js
import Markdown from '@nuxt/content/parsers/markdown'
import { getDefaults, processMarkdownOptions } from '@nuxt/content/lib/utils'

export async function parseMarkdown(md) {
  const options = getDefaults()
  processMarkdownOptions(options)
  return new Markdown(options.markdown).toJSON(md) // toJSON() is async
}

然后像这样在你的组件中使用它:

<template>
  <nuxt-content :document="page" />
</template>

<script>
import { parseMarkdown } from '~/utils/parseMarkdown'

export default {
  async asyncData({ $axios }) {
    const resp = await $axios.get('https://example.com/page.md')
    const page = await parseMarkdown(resp.data)
    return { page }
  }
}
</script>

演示

于 2021-04-12T07:24:51.573 回答
0

这行不通吗?

const mytext = await this.$content('a_page_title_here').fetch()
于 2021-04-08T23:26:26.303 回答