Carregamento
Fora da caixa, o Nuxt dá para você o seu próprio componente de barra de progresso de carregamento que é exibido entre as rotas. Você pode personalizar ele, desativar ele ou até criar seu próprio componente de carregamento.
Personalizando a Barra de Progresso
Entre outras propriedades, a color, o tamanho, a duração e a direção da barra de progresso podem ser personalizados para enquadrarem-se as necessidades da sua aplicação. Isto é feito pela atualização da propriedade loading do nuxt.config.js com as propriedades correspondentes.
Por exemplo, para definir uma barra de progresso azul com a altura de 5px, atualizamos o nuxt.config.js para o seguinte:
export default {
loading: {
color: 'blue',
height: '5px'
}
}
Lista de propriedades para personalizar a barra de progresso.
| Chave | Tipo | Padrão | Descrição | |
|---|---|---|---|---|
| color | String | 'black' | Cor CSS da barra de progresso | |
| failedColor | String | 'red' | Cor CSS da barra de progresso quando um erro é anexado durante a renderização da rota (se os dados ou requisição enviada voltar com um erro por exemplo). | |
| height | String | '2px' | Altura da barra de progresso (usada dentro da propriedade de estilo da barra de progresso) | |
| throttle | Number | 200 | Em ms, espera pelo tempo especificado antes de exibir a barra de progresso. Útil para impedir a barra de piscar. | |
| duration | Number | 5000 | Em ms, a duração máxima da barra de progresso, o Nuxt assume que a rota será renderizada antes de 5 segundos. | |
| continuous | Boolean | false | Mantêm a barra de progresso animando sempre que o carregamento levar mais tempo que a duração. | |
| css | Boolean | true | Define para false para remover os estilos padrão da barra de progresso (e adicione você mesmo). | |
| rtl | Boolean | false | Define a direção da barra de progresso da direita para a esquerda. |
Desativar a Barra de Progresso
Se você não quiser exibir a barra de progresso entre as rotas adicione loading: false dentro do seu ficheiro nuxt.config.js :
export default {
loading: false
}
A propriedade loading dá para você a opção de desativar a barra de progresso padrão em uma página específica.
<template>
<h1>My page</h1>
</template>
<script>
export default {
loading: false
}
</script>
Começar Programaticamente a Barra de Carregamento
A barra de carregamento também pode ser programaticamente iniciada dentro dos seus componentes ao chamar this.$nuxt.$loading.start() para iniciar a barra de carregamento e this.$nuxt.$loading.finish() para terminar ele.
Durante o processo de montagem dos componentes da sua página, a propriedade $loading pode não estar imediatamente disponível para acessar. Para dar a volta a isso, se você quiser iniciar o carregador dentro do método mounted , certifique-se de envolver a sua chamada para o método $loading dentro de this.$nextTick como é mostrado abaixo.
export default {
mounted() {
this.$nextTick(() => {
this.$nuxt.$loading.start()
setTimeout(() => this.$nuxt.$loading.finish(), 500)
})
}
}
Os Interiores da Barra de Progresso
Infelizmente, não é possível para o componente de carregamento saber de antemão quanto tempo uma nova página levará para carregar. Portanto, não é possível de maneira precisa animar a barra de progresso até 100% do tempo de carregamento.
O componente de carregamento do Nuxt resolve parcialmente isso ao deixar você definir a duration, isso deve ser definido para uma estimativa de quanto tempo o processo de carregamento levará. A menos que você use um componente de carregamento personalizado, a barra de progresso irá sempre mover de 0% para 100% em tempo de duration (independentemente da progressão atual). Sempre que o carregamento levar mais tempo do que o tempo em duration , a barra de progresso continuará em 100% até o carregamento terminar.
Você pode mudar o comportamento padrão ao configurar continuous para true, então depois de alcançar o 100% a barra de progresso começará reduzindo novamente de volta para 0% em tempo de duration . Sempre que o carregamento não estiver terminado depois de alcançar 0% ele começará crescendo novamente de 0% até 100%, isto é repetido até o carregamento terminar.
export default {
loading: {
continuous: true
}
}
Exemplo de uma barra de progresso contínua:

Usando um Componente de Carregamento Personalizado
Você pode também criar seu próprio componente que o Nuxt chamará no lugar do componente padrão para a barra de progresso. Para fazer isso no entanto, você precisa dar um caminho para o seu componente dentro da opção loading . Depois, o seu componente será chamado diretamente pelo Nuxt.
O seu componente tem que expor alguns desses métodos:
| Método | Obrigatório | Descrição |
|---|---|---|
| start() | Obrigatório | Chamado sempre que uma rota muda, é aqui onde você exibe o seu componente. |
| finish() | Obrigatório | Chamado sempre que uma rota é carregada (e dados são pedidos), é aqui onde você esconde o seu componente. |
| fail(error) | Opcional | Chamado sempre que uma rota não puder ser carregada (falhou ao pedir os dados por exemplo). |
| increase(num) | Opcional | Chamado durante o carregamento do componente de rota, num é um Inteiro menor que 100 (Integer < 100). |
Você pode criar o seu componente personalizado dentro de components/LoadingBar.vue:
<template>
<div v-if="loading" class="loading-page">
<p>Loading...</p>
</div>
</template>
<script>
export default {
data: () => ({
loading: false
}),
methods: {
start() {
this.loading = true
},
finish() {
this.loading = false
}
}
}
</script>
<style scoped>
.loading-page {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(255, 255, 255, 0.8);
text-align: center;
padding-top: 200px;
font-size: 30px;
font-family: sans-serif;
}
</style>
Depois, você atualiza seu nuxt.config.js para dizer ao Nuxt para usar o seu componente:
export default {
loading: '~/components/LoadingBar.vue'
}
A Propriedade loadingIndicator
Não há conteúdo vindo do lado do servidor no primeiro carregamento da página, quando o Nuxt estiver executando no modo SPA. Então, ao invés de mostrar uma página em branco enquanto a página carrega, o Nuxt dá para você um rodopiador (spinner) o qual você pode personalizar para adicionar suas próprias cores, fundo e até mudar o indicador.
export default {
loadingIndicator: {
name: 'circle',
color: '#3B8070',
background: 'white'
}
}
Indicadores Embutidos
Esses indicadores são importados do incrível projeto SpinKit . Você pode consultar a sua página de demonstração para pré-visualizar os rodopiadores (spinners). No propósito de usar um desses rodopiadores tudo o que você tem de fazer é adicionar seu nome a propriedade name. Não precisa importar ou instalar nada. Aqui está uma lista dos indicadores embutidos para você usar.
- circle
- cube-grid
- fading-circle
- folding-cube
- chasing-dots
- nuxt
- pulse
- rectangle-bounce
- rotating-plane
- three-bounce
- wandering-cubes
Os indicadores embutidos suportam as opções color e background .
Indicadores Personalizados
Se você precisar seu próprio indicador especial, um valor do tipo String ou chave Name pode ser um caminho para o modelo (template) HTML do código-fonte do indicador! Todas as opções são passadas para o modelo também.
Código-fonte do componente Loading embutido do Nuxt!
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