在探索 Nuxt 这个框架的时候,发现了一个没见过的模块 @nuxt/content ,简单试用了一下,感觉很有趣,这里简单做个总结。

是什么,有什么用?

通过这个模块可以自动解析: markdown json yaml xml csv 文件,同时提供类似MongoDB的api来读取数据。

启动 live-editing 还可以双击直接进行编辑,然后会like生效

有哪些场景可能用到这个模块:

  • 使用hexo的来维护个人博客的情况,本地维护了一个有层次的Markdown文件夹
  • 有一堆csv导出的数据,需要做可视化的情况
  • 通过爬虫拿到一堆json,需要进行数据处理的情况

官方提供了两段视频,这里可以直接观看 https://content.nuxtjs.org/

  • 直接在Markdown里使用写好的全局Vue组件,真是惊艳。
  • 在组件中直接读取json文件,随时进行过滤和展示

如何使用?

在启动项目时候选择这个module,如果是后续补充,根据文档提示添加即可。

image.png

假定你在项目目录创建了 ./content/hello.md 文件,里面正常书写Markdown内容。

我们再vue组件中使用

  1. <template>
  2. <div class="container">
  3. <nuxt-content class="myMD" :document="doc" />
  4. </div>
  5. </template>
  6. <script lang="js">
  7. export default {
  8. name: 'App',
  9. async asyncData ({$content,params}) {
  10. const doc = await $content(params.slug||'hello').fetch()
  11. // console.log(doc)
  12. return {doc}
  13. },
  14. }
  15. </script>

使用全局组件两个限制:

  • 不能使用驼峰,只能使用 <my-content></my-content>
  • 不能自闭合。只能使用 <my-content></my-content>

如果需要给组件传入data值,可以在meta中使用 multiselectOptions

具体细节还是得观看官方文档。

如何通过api来获取内容,在上面的demo中可以看到,传入了 ctx.$content

  1. ctx.$content(path, {
  2. deep: false, // 是否获取子目录
  3. text: false // 是否返回原始md内容
  4. }) // 其他api操作
  5. .only([keys]) // 返回的字段
  6. .withOut([])
  7. .where({})
  8. .sortBy()
  9. .limit()
  10. .skip()
  11. .search()