【问题标题】:Nuxt/content - How to display a list of articles on the article page (_slug)Nuxt/content - 如何在文章页面上显示文章列表 (_slug)
【发布时间】:2020-12-31 08:26:23
【问题描述】:

我正在使用 nuxt/content 模块来创建一个文档站点。

Nuxt blog 上,他们有一篇帖子在单独的 index.vue 页面上显示内容,在 _slug.vue 页面上显示帖子详细信息。

我正在尝试使用不同的布局在同一页面上显示文章/帖子列表。

这是我正在使用的文件夹结构:

content (folder)
    articles (folder)
        article1.md
        article2.md
        article3.md
pages (folder)
    blog (folder)
        _slug.vue
        index.vue

这就是 my_slug.vue 文件:

<template>
  <div class="flex">
    <aside class="w-1/3">
      <ul>
        <li v-for="article in articles" :key="article.slug">
          <NuxtLink :to="{ name: 'blog-slug', params: { slug: article.slug } }">
            <div>
              <h2>{{ article.title }}</h2>
            </div>
          </NuxtLink>
        </li>
      </ul>
    </aside>
    <main class="w-full">
      <h1>{{ article.title }}</h1>

      <p>Article last updated: {{ formatDate(article.updatedAt) }}</p>

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

      <prev-next :prev="prev" :next="next" />
    </main>
    <aside class="w-1/3">
      <h4>On this page</h4>
      <nav>
        <ul>
          <li v-for="link of article.toc" :key="link.id">
            <NuxtLink :to="`#${link.id}`" :class="{ 'py-2': link.depth === 2, 'ml-2 pb-2': link.depth === 3 }">{{ link.text }}</NuxtLink>
          </li>
        </ul>
      </nav>
    </aside>
  </div>
</template>

<script>
  export default {

      async asyncData({ $content, params }) {
        const articles = await $content('articles', params.slug)
          .only(['title', 'slug'])
          .sortBy('createdAt', 'asc')
          .fetch()

        const article = await $content('articles', params.slug).fetch()

        const [prev, next] = await $content('articles')
          .only(['title', 'slug'])
          .sortBy('createdAt', 'asc')
          .surround(params.slug)
          .fetch()

        return {
          articles,
          article,
          prev,
          next
        }
      },
    methods: {
      formatDate(date) {
        const options = { year: 'numeric', month: 'long', day: 'numeric' }
        return new Date(date).toLocaleDateString('en', options)
      }
    }
  }
</script>

如果我在 index.vue 页面上使用“显示所有文章”这段代码,它可以工作,但在 _slug.vue 上,列表现在是空的。

这是帖子正确显示的索引:

<template>
   <div>
    <h1>Blog Posts</h1>
    <ul>
      <li v-for="article of articles" :key="article.slug">
        <NuxtLink :to="{ name: 'blog-slug', params: { slug: article.slug } }">
          <div>
            <h2>{{ article.title }}</h2>
          </div>
        </NuxtLink>
      </li>
    </ul>
  </div>
</template>

<script>
  export default {
    async asyncData({ $content, params }) {
      const articles = await $content('articles', params.slug)
        .only(['title', 'slug'])
        .sortBy('createdAt', 'asc')
        .fetch()

      return {
        articles
      }
    }
  }
</script>

<style>

</style>

我错过了什么吗?

【问题讨论】:

  • 请提供故障组件的完整来源。我不完全理解当前代码中带有 3 个 asyncData 函数的“脚本”部分。
  • 当然,我现在确实更新了它。 :)
  • @manniL 我明白你说的。即使在使用 1 个 asyncData 函数更新代码后,错误也消失了,但我无法看到文章列表。

标签: javascript vue.js nuxt.js


【解决方案1】:

由于您的查询不正确,没有检索到任何文章,您必须在 articles 文件夹中搜索:

const articles = await $content('articles') // instead of $content('articles', params.slug)
  .only(['title', 'slug'])
  .sortBy('createdAt', 'asc')
  .fetch()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多