Посмотрите эти примеры кода, которые можно скопировать прямо в ваше приложение.
Использование
asyncData
export default { async asyncData({ $content, params }) { const article = await $content('articles', params.slug).fetch() return { article } }}
Особенности
Поиск
Добавьте компонент поиска с помощью watch:
<template> <div> <input v-model="query" type="search" autocomplete="off" /> <ul v-if="articles.length"> <li v-for="article of articles" :key="article.slug"> <NuxtLink :to="{ name: 'blog-slug', params: { slug: article.slug } }">{{ article.title }}</NuxtLink> </li> </ul> </div></template><script>export default { data () { return { query: '', articles: [] } }, watch: { async query (query) { if (!query) { this.articles = [] return } this.articles = await this.$content('articles') .only(['title', 'slug']) .sortBy('createdAt', 'asc') .limit(12) .search(query) .fetch() } }}</script>
Взгляните на документацию по поиску
Пагинация
Добавьте ссылки назад и вперед используя метод surround
:
<template> <div> <NuxtLink v-if="prev" :to="{ name: 'blog-slug', params: { slug: prev.slug } }"> {{ prev.title }} </NuxtLink> <NuxtLink v-if="next" :to="{ name: 'blog-slug', params: { slug: next.slug } }"> {{ next.title }} </NuxtLink> </div></template><script>export default { async asyncData({ $content, params }) { const [prev, next] = await $content('articles') .only(['title', 'slug']) .sortBy('createdAt', 'asc') .surround(params.slug) .fetch() return { prev, next } }}</script>
Взгляните на документацию по методу surround
Оглавление
Добавьте оглавление, циклически перебирая наш массив toc и используя id
для ссылки на него и text
для отображения заголовка. Мы можем использовать depth
для различного стиля заголовков:
<template> <ul> <li v-for="link of article.toc" :key="link.id" :class="{ 'toc2': link.depth === 2, 'toc3': link.depth === 3 }" > <NuxtLink :to="`#${link.id}`">{{ link.text }}</NuxtLink> </li> </ul></template><script>export default { async asyncData({ $content, params }) { const article = await $content('articles', params.slug) .fetch() return { article } }}</script>
Взгляните на документацию по оглавлению
Table of Contents