Посмотрите эти примеры кода, которые можно скопировать прямо в ваше приложение.
Использование
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