You are browsing Nuxt 2 docs. Go to Nuxt 3 docs, or learn more about Nuxt 2 Long Term Support.

Translated page Contents of this page might be outdated.

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 :

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.

pages/index.vue
<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:

/img/docs/api-continuous-loading.gif

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:

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:

nuxt.config.js
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.

nuxt.config.js
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!