Componentes do Nuxt
O Nuxt vem com alguns componentes importantes incluídos fora da caixa, os quais serão úteis quando estiver construindo sua aplicação. Os componentes estão disponíveis globalmente, o que significa que você não precisa importar eles no sentido de usar eles.
Dentro dos parágrafos seguintes, cada componente incluído é explicado.
O Componente Nuxt
O componente <Nuxt> é o componente que você usa para exibir seus componentes de página. Basicamente, este componente é substituído pelo que está dentro dos componentes de página dependendo da página que está sendo exibida. Daí, é importante que você adicione o componente <Nuxt> aos seus esquemas.
<template>
<div>
<div>My nav bar</div>
<Nuxt />
<div>My footer</div>
</div>
</template>
<Nuxt> apenas pode ser usando dentro dos esquemas .O componente <Nuxt> pode carregar a propriedade nuxt-child-key. Esta propriedade será passada para <RouterView>, assim suas transições funcionarão corretamente dentro das páginas dinâmicas.
Há 2 maneiras de manipular a propriedade interna key de <RouterView>.
-
Use uma propriedade
nuxtChildKeyno seu componente<Nuxt>
<template>
<div>
<Nuxt :nuxt-child-key="someKey" />
</div>
</template>
-
Adicione a opção
keycomostringoufunçãodentro dos componentes de página
export default {
key(route) {
return route.fullPath
}
}
O Componente NuxtChild
Este componente é usado para exibição dos componentes filhos dentro de uma rota aninhada.
Example:
-| pages/
---| parent/
------| child.vue
---| parent.vue
Esta árvore de ficheiro gerará estas rotas:
;[
{
path: '/parent',
component: '~/pages/parent.vue',
name: 'parent',
children: [
{
path: 'child',
component: '~/pages/parent/child.vue',
name: 'parent-child'
}
]
}
]
Para exibir o componente child.vue , você tem de inserir o componente <NuxtChild> dentro de pages/parent.vue:
<template>
<div>
<h1>I am the parent view</h1>
<NuxtChild :foobar="123" />
</div>
</template>
keep-alive
Ambos, o componente <Nuxt> e o componente <NuxtChild/> , aceitam keep-alive e keep-alive-props.
<template>
<div>
<Nuxt keep-alive :keep-alive-props="{ exclude: ['modal'] }" />
</div>
</template>
<!-- será convertido em alguma coisa parecida com isto -->
<div>
<KeepAlive :exclude="['modal']">
<RouterView />
</KeepAlive>
</div>
<template>
<div>
<NuxtChild keep-alive :keep-alive-props="{ exclude: ['modal'] }" />
</div>
</template>
<!-- será convertido em alguma coisa parecida com isto -->
<div>
<KeepAlive :exclude="['modal']">
<RouterView />
</KeepAlive>
</div>
Os componentes <NuxtChild> pode também receber propriedades como um componente normal do Vue.
<template>
<div>
<NuxtChild :key="$route.params.id" />
</div>
</template>
Pare ver um exemplo, dê uma vista de olhos ao exemplo de rotas-aninhadas .
O Componente NuxtLink
Para navegar entre as páginas da sua aplicação, você deve usar o componente <NuxtLink> . Este componente está incluído com Nuxt e assim você não tem de importar ele como você faz com outros componentes. É similar a tag <a> do HTML exceto que ao invés de usar o href="/about" você usa to="/about". Se você já usou o vue-router antes, você pode pensar do <NuxtLink> como uma substituição do <RouterLink>.
Uma simples ligação para a página index.vue dentro da sua pasta pages:
<template>
<NuxtLink to="/">Home page</NuxtLink>
</template>
O componente <NuxtLink> deve ser usado para todas ligações internas. Isso significa que todas as ligações para as páginas dentro do seu site você deve usar o <NuxtLink>. A tag <a> deve ser usada para todas ligações externas. Isso significa que se você tiver ligações para outros websites você deve usar a tag <a> para esses.
<template>
<div>
<h1>Home page</h1>
<NuxtLink to="/about"
>About (internal link that belongs to the Nuxt App)</NuxtLink
>
<a href="https://nuxtjs.org">External Link to another page</a>
</div>
</template>
<RouterLink>, sinta-se livre para ler a documentação do Vue Router para obter mais informações.<NuxtLink> também vem com a pré-requisição inteligente fora da caixa.Pré-requisitar Ligações
O Nuxt automaticamente incluí pré-requisição inteligente. Isso significa que ele deteta quando uma ligação está visível, seja dentro da viewport ou quando estiver rolando na tela e pré-requisita o JavaScript para aquelas páginas assim que eles estiverem prontas quando o usuário clicar na ligação. O Nuxt apenas carrega os recursos quando o browser não estiver ocupado e pula a pré-requisição se a sua conexão estiver offline ou se você apenas tiver uma conexão 2G.
Desativa a Pré-requisição para Ligações Específicas
No entanto algumas vezes você pode querer desativar a pré-requisição em algumas ligações se sua página tiver muito JavaScript ou você tiver muitas páginas diferentes que seriam pré-requisitadas ou você tiver muitos scripts de terceiros que precisam ser carregados. Para desativar a pré-requisição em uma ligação específica, você pode usar a propriedade no-prefetch . Desde o Nuxt v2.10.0, você também pode usar a propriedade prefetch definida para false.
<NuxtLink to="/about" no-prefetch>About page not pre-fetched</NuxtLink>
<NuxtLink to="/about" :prefetch="false">About page not pre-fetched</NuxtLink>
Desativar a Pré-requisição Globalmente
Para desativar a pré-requisição em todas ligações, defina o prefetchLinks para false:
export default {
router: {
prefetchLinks: false
}
}
Desde o Nuxt v2.10.0, se você tiver definido prefetchLinks para false mas você quiser pré-requisitar uma ligação específica, você pode usar a propriedade prefetch :
<NuxtLink to="/about" prefetch>About page pre-fetched</NuxtLink>
linkActiveClass (classe da ligação ativa)
A linkActiveClass funciona da mesma forma que a classe do vue-router para ligações ativas. Se quisermos mostrar quais ligações são ativada, tudo que você tem de fazer é criar algum CSS para a classe nuxt-link-active.
.nuxt-link-active {
color: red;
}
Se você quiser, você pode também configurar o nome da classe para alguma coisa que você queira. Você pode fazer isso ao modificar a propriedade linkActiveClass dentro da propriedade router dentro do seu ficheiro nuxt.config.js.
export default {
router: {
linkActiveClass: 'my-custom-active-link'
}
}
vue-router. Veja a documentação do vue-router para obter mais informações.linkExactActiveClass (classe da ligação exata ativa)
O linkExactActiveClass funciona da mesma forma que a classe do vue-router para ligações exatas ativas. Se quisermos mostrar quais ligações são ativas com um correspondente exato, todo que você tem de fazer é criar algum CSS para a classe nuxt-link-exact-active.
.nuxt-link-exact-active {
color: green;
}
Se você quiser, você pode também configurar o nome da classe para alguma coisa que você queira. Você pode fazer isso ao modificar a propriedade linkExactActiveClass dentro da propriedade router dentro do seu ficheiro nuxt.config.js.
export default {
router: {
linkExactActiveClass: 'my-custom-exact-active-link'
}
}
vue-router. Veja a documentação do vue-router para obter mais informações.linkPrefetchedClass (classe da ligação pré-requisitada)
O linkPrefetchedClass permitirá você adicionar estilos para todas ligações que têm de ser pré-requisitados. Isto é genial para testar quais ligações estão sendo pré-requisitadas depois de modificar o comportamento padrão. O linkPrefetchedClass está desativado por padrão. Se você quiser ativar ele você precisa adicionar ele à propriedade router dentro do seu ficheiro nuxt.config.js.
export default {
router: {
linkPrefetchedClass: 'nuxt-link-prefetched'
}
}
Depois você pode adicionar estilos para aquela classe.
.nuxt-link-prefetched {
color: orangeRed;
}
nuxt-link-prefetched mas você pode nomear ele para o você achar melhor.O Componente client-only
Este componente é usado para propositadamente renderizar um componente somente no lado do cliente. Para importar um componente somente no cliente, registe o componente dentro de um plugin somente no lado do cliente.
<template>
<div>
<sidebar />
<client-only placeholder="Loading...">
<!-- este componente somente será renderizado no lado do cliente -->
<comments />
</client-only>
</div>
</template>
Use um slot como um placeholder até <client-only /> ser montado no lado do cliente.
<template>
<div>
<sidebar />
<client-only>
<!-- este componente somente será renderizado no lado do cliente -->
<comments />
<!-- indicador de carregamento, renderizado no lado do servidor -->
<template #placeholder>
<comments-placeholder />
</template>
</client-only>
</div>
</template>
$refs dentro <client-only> pode não estar pronto mesmo com $nextTick, o truque pode ser chamar o $nextTick umas poucas vezes:mounted(){
this.initClientOnlyComp()
},
methods: {
initClientOnlyComp(count = 10) {
this.$nextTick(() => {
if (this.$refs.myComp) {
//...
} else if (count > 0) {
this.initClientOnlyComp(count - 1);
}
});
},
}
<no-ssr> ao invés de <client-only>
Clément Ollivier
Daniel Roe
Alex Hirzel
Ajeet Chaulagain
René Eschke
Sébastien Chopin
Nico Devs
Muhammad
Nazaré da Piedade
Naoki Hamada
Tom
Yann Aufray
Anthony Chu
Nuzhat Minhaz
Lucas Portet
Richard Schloss
Xanzhu
bpy
Antony Konstantinidis
Hibariya
Jose Seabra
Eze
Florian LEFEBVRE
Lucas
Julien SEIXAS
Hugo
Sylvain Marroufin
Spencer Cooley
Piotr Zatorski
Vladimir Semenov
Harry Allen
kazuya kawaguchi
Unai Mengual
Hyunseung Lee
Alexandre Chopin
pooya parsa
Nick Medrano
Mosaab Emam
Iljs Путлер Капут
Heitor Ramon Ribeiro
Nero
Yoon Han
Ikko Ashimine
FamCodings
Ayouli
F. Hinkelmann
felipesuri
Christophe Carvalho Vilas-Boas
Leoš Literák
Trizotti
Marcello Bachechi
Rodolphe
Thomas Underwood
Shek Evgeniy
Lukasz Formela
Hugo Torzuoli