Componentes da Nuxt
A Nuxt vem com alguns componentes importantes incluídos de imediato, que serão úteis na construção da nossa aplicação. Os componentes estão disponíveis globalmente, o que significa que não precisamos de os importar para os utilizar.
Nos parágrafos seguintes, cada um dos componentes incluídos é explicado.
O Componente Nuxt
O componente <Nuxt> é o componente que usamos para exibir os componentes da nossa página. Basicamente, este componente é substituído pelo que está dentro dos nossos componentes de página, dependendo da página que está a ser mostrada. Por isto, é importante adicionarmos o componente <Nuxt> às nossas disposições:
<template>
<div>
<div>My nav bar</div>
<Nuxt />
<div>My footer</div>
</div>
</template>
<Nuxt> só pode ser utilizado dentro de disposições .O componente <Nuxt> pode receber a propriedade de nuxt-child-key. Esta propriedade será passada para <RouterView> para as nossas transições funcionarem corretamente dentro das páginas dinâmicas.
Existem 2 maneiras de manipular a propriedade interna key do <RouterView>.
-
Usar uma propriedade
nuxtChildKeyno nosso componente<Nuxt>:
<template>
<div>
<Nuxt :nuxt-child-key="someKey" />
</div>
</template>
-
Adicionar a opção
keynos componentes de página comostringoufunction:
export default {
key(route) {
return route.fullPath
}
}
O Componente NuxtChild
Este componente é utilizado para apresentar os componentes filhos numa rota encaixada.
Exemplo:
-| pages/
---| parent/
------| child.vue
---| parent.vue
Esta árvore de ficheiros 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, temos que 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 para algo como isto -->
<div>
<KeepAlive :exclude="['modal']">
<RouterView />
</KeepAlive>
</div>
<template>
<div>
<NuxtChild keep-alive :keep-alive-props="{ exclude: ['modal'] }" />
</div>
</template>
<!-- será convertido para algo como isto -->
<div>
<KeepAlive :exclude="['modal']">
<RouterView />
</KeepAlive>
</div>
Os componentes <NuxtChild> também podem receber propriedades como um componente .vue formal:
<template>
<div>
<NuxtChild :key="$route.params.id" />
</div>
</template>
Para ver um exemplo, consultar o exemplo de rotas encaixadas .
O Componente NuxtLink
Para navegar entre as páginas da nossa aplicação, devemos utilizar o componente <NuxtLink>. Este componente está incluído na Nuxt, pelo que não temos de o importar como fazemos com os outros componentes. É semelhante ao marcador de hipertexto <a> exceto que em vez de utilizar href="/about" utilizamos to="/about". Se já utilizamos o vue-loader antes, podemos pensar no <NuxtLink> como um substituto do <RouterLink>.
Uma simples hiperligação para a página index.vue na nossa pasta pages:
<template>
<NuxtLink to="/">Home page</NuxtLink>
</template>
O componente <NuxtLink> deve ser utilizado para todas as hiperligações internas. Isto significa que para todas as hiperligações para as páginas do nosso sítio, devemos usar <NuxtLink>. O marcador <a> deve ser utilizado para todas as hiperligações externas. Isto significa que se tivermos hiperligações para outros sítios da Web, devemos utilizar o marcador <a> para essas hiperligações:
<template>
<div>
<h1>Home page</h1>
<NuxtLink to="/about"
>About (internal link that belongs to the Nuxt App)</NuxtLink
>
<a href="https://v2.nuxt.com">External Link to another page</a>
</div>
</template>
<RouterLink>, podemos ler a documentação da vue-router para mais informações.<NuxtLink> também vem com pré-requisição inteligente de dados pronta para uso.prefetchLinks
A Nuxt inclui automaticamente a pré-requisição inteligente de dados. Isto significa que deteta quando uma hiperligação está visível, quer na janela de visualização, quer ao deslocar-se, e prepara previamente o código de JavaScript para essas páginas, para estarem prontas quando o utilizador clicar na hiperligação. A Nuxt só carrega os recursos quando o navegador não está ocupado e salta a pré-requisição de dados se a nossa conexão estiver desligada da rede ou se só tivermos uma conexão de 2G.
Desativar a Pré-requisição de Dados de Hiperligações Específicas
No entanto, por vezes podemos querer desativar a pré-requisição em algumas hiperligações se a nossa página tiver muito JavaScript, ou se tivermos muitas páginas diferentes que seriam pré-carregadas, ou se tivermos muitos programas de terceiros que precisam de ser carregados. Para desativar a pré-requisição numa hiperligação específica, podemos usar a propriedade no-prefetch. Desde a Nuxt v2.10.0, também podemos usar a propriedade prefetch definida como 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 de Dados Globalmente
Para desativar a pré-requisição de dados de todas as hiperligações, definimos prefetchLinks para false:
export default {
router: {
prefetchLinks: false
}
}
Desde a Nuxt v2.10.0, se tivermos definido prefetchLinks como false, mas quisermos pré-requisitar dados duma hiperligação específica, podemos usar a propriedade prefetch:
<NuxtLink to="/about" prefetch>About page pre-fetched</NuxtLink>
linkActiveClass
A classe linkActiveClass funciona da mesma maneira que a classe da vue-router para hiperligações ativas. Se quisermos mostrar quais as hiperligações que estão ativas, tudo o que temos de fazer é criar alguma folha de estilo para a classe nuxt-link-active:
.nuxt-link-active {
color: red;
}
main.css.Se quisermos, também podemos configurar o nome da classe para ser outra coisa. Podemos fazer isto ao modificar a linkActiveClass na propriedade router no nosso ficheiro nuxt.config.js:
export default {
router: {
linkActiveClass: 'my-custom-active-link'
}
}
linkActiveClass da vue-router. Consultar a documentação da vue-router por mais informações.linkExactActiveClass
A classe linkExactActiveClass funciona da mesma maneira que a classe da vue-router para as hiperligações ativas exatas. Se quisermos mostrar quais as hiperligações que estão ativas com uma correspondência exata, tudo o que temos de fazer é criar alguma folha de estilo para a classe nuxt-link-exact-active:
.nuxt-link-exact-active {
color: green;
}
main.css.Se quisermos, também podemos configurar o nome da classe para ser outra coisa. Podemos fazer isto ao modificar a linkExactActiveClass na propriedade router no nosso ficheiro nuxt.config.js:
export default {
router: {
linkExactActiveClass: 'my-custom-exact-active-link'
}
}
linkExactActiveClass da vue-router. Consultar a documentação da vue-router por mais informações.linkPrefetchedClass
A classe linkPrefetchedClass nos permitirá adicionar estilos a todas as hiperligações que foram pré-carregadas. Isto é ótimo para testar quais hiperligações são pré-requisitadas após modificar o comportamento predefinido. A linkPrefetchedClass está desativada por predefinição. Se quisermos ativá-la, precisamos de adicioná-la à propriedade router no nosso ficheiro nuxt.config.js:
export default {
router: {
linkPrefetchedClass: 'nuxt-link-prefetched'
}
}
Em seguida, podemos adicionar os estilos a esta classe:
.nuxt-link-prefetched {
color: orangeRed;
}
nuxt-link-prefetched, mas podemos dar-lhe o nome que quisermos.O Componente client-only
Este componente é utilizado para desenhar intencionalmente um componente apenas no lado do cliente. Para importar um componente apenas no cliente, registamos o componente numa extensão apenas do lado do cliente:
<template>
<div>
<sidebar />
<client-only placeholder="Loading...">
<!-- este componente será apenas desenhado no lado do cliente -->
<comments />
</client-only>
</div>
</template>
Utilizamos uma ranhura como marcadora de posição até o <client-only /> ser montado no lado do cliente:
<template>
<div>
<sidebar />
<client-only>
<!-- este componente será apenas desenhado no lado do cliente -->
<comments />
<!-- indicador de carregamento, desenhado no lado do servidor -->
<template #placeholder>
<comments-placeholder />
</template>
</client-only>
</div>
</template>
$refs dentro de <client-only> podem não estar prontas mesmo com a $nextTick, o truque pode ser chamar $nextTick algumas vezes:mounted(){
this.initClientOnlyComp()
},
methods: {
initClientOnlyComp(count = 10) {
this.$nextTick(() => {
if (this.$refs.myComp) {
//...
} else if (count > 0) {
this.initClientOnlyComp(count - 1);
}
});
},
}
<no-ssr> em vez de <client-only>.
Sébastien Chopin
Nazaré da Piedade
Nobu
川音리오
Maciek Palmowski
Nestor Vera
Daniel Roe
Yue Yang
Jeronimas
Clément Ollivier
Alexander Lichter
N3-rd
Adrien Zaganelli
Mag
Stefan Huber
Olga Bulat
Paiva
Florian Reuschel
Savas Vedova
HIJACK
Vinícius Alves
Kareem Dabbeet
Valentín Costa
Ryan Skinner
Alex Hirzel
Ajeet Chaulagain
René Eschke
Nico Devs
Muhammad
Naoki Hamada
Tom
Yann Aufray
Anthony Chu
Nuzhat Minhaz
Lucas Portet
Richard Schloss
Bobby
bpy
Antony Konstantinidis
Hibariya
Jose Seabra
Eze
Florian Lefebvre
Lucas Recoaro
Julien SEIXAS