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

De imediato, a Nuxt dá-nos o seu componente de barra de progresso de carregamento que é mostrado entre as rotas. Podemos personalizá-lo, desativá-lo ou até criar o nosso próprio componente de carregamento.


Personalizar a Barra de Progresso

Entre outras propriedades, a cor, o tamanho, a duração e a direção da barra de progresso podem ser personalizadas de acordo com as necessidades da nossa aplicação. Isto é feito ao atualizar a propriedade loading do nuxt.config.js com as propriedades correspondentes.

Por exemplo, para definir uma barra de progresso azul com uma altura de 5px, atualizamos o nuxt.config.js para o seguinte:

export default {
  loading: {
    color: 'blue',
    height: '5px'
  }
}
Se não virmos a barra de carregamento quando nos deslocamos entre as rotas, o tempo de carregamento da página é suficientemente curto para ser ignorado pelos utilizadores. Se quisermos que a barra de carregamento apareça mesmo que o tempo for curto, tentamos throttle: 0.

Lista de propriedades para personalizar a barra de progresso.

Chave Tipo Padrão Descrição
color String 'black' Cor de folha de estilo da barra de progresso
failedColor String 'red' Cor de folha de estilo da barra de progresso quando um erro é acrescentado durante o desenho da rota (se os dados ou a busca de dados devolverem um erro, por exemplo).
height String '2px' Altura da barra de progresso (utilizada na propriedade de estilo da barra de progresso).
throttle Number 200 Em milissegundos, espera o tempo especificado antes de apresentar a barra de progresso. Útil para evitar que a barra fique intermitente.
duration Number 5000 Em milissegundos, a duração máxima da barra de progresso, a Nuxt assume que a rota será desenhada antes de 5 segundos.
continuous Boolean false Manter a animação da barra de progresso quando o carregamento demora mais do que a duração.
css Boolean true Definir como false para remover os estilos predefinidos da barra de progresso (e adicionar os nossos próprios estilos).
rtl Boolean false Definir a direção da barra de progresso da direita para a esquerda.

Desativar a Barra de Progresso

Se não quisermos exibir a barra de progresso entre as rotas, adicionamos loading: false no nosso ficheiro nuxt.config.js:

nuxt.config.js
export default {
  loading: false
}

A propriedade loading dá-nos a opção de desativar a barra de progresso de carregamento predefinida numa página específica:

pages/index.vue
<template>
  <h1>My page</h1>
</template>

<script>
  export default {
    loading: false
  }
</script>

Iniciar Programaticamente a Barra de Carregamento

A barra de carregamento também pode ser iniciada programaticamente nos nossos componentes, ao chamar this.$nuxt.$loading.start() para iniciar a barra de carregamento e this.$nuxt.$loading.finish() para terminá-la.

A propriedade $loading pode não estar imediatamente disponível para ser usada durante o processo de montagem do nosso componente de página. Para contornar isto, se quisermos iniciar o carregador no método mounted, precisamos envolver as nossas chamadas do 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)
    })
  }
}

O Interior da Barra de Progresso

Infelizmente, não é possível que o componente de carregamento saiba antecipadamente quanto tempo demorará a carregar uma nova página. Por isto, não é possível animar com exatidão a barra de progresso para 100% do tempo de carregamento.

O componente de carregamento da Nuxt resolve isto parcialmente, permitindo que definamos a duration, que deve ser definida como uma estimativa de quanto tempo o processo de carregamento levará. A menos que usemos um componente de carregamento personalizado, a barra de progresso sempre se moverá de 0% a 100% no tempo de duration (independentemente da progressão real). Quando o carregamento demorar mais do que o tempo de duration, a barra de progresso permanecerá em 100% até o carregamento terminar.

Podemos alterar o comportamento predefinido ao definir continuous como true. Depois de atingir 100%, a barra de progresso começará a diminuir para 0% novamente no tempo de duration. Se o carregamento ainda não estiver concluído depois de atingir 0%, aumentará novamente de 0% para 100%. O processo repete-se até ao fim do carregamento:

export default {
  loading: {
    continuous: true
  }
}

Exemplo duma barra de progresso contínua:

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

Usar um Componente de Carregamento Personalizado

Também podemos criar o nosso próprio componente que a Nuxt chamará no lugar do componente predefinido da barra de progresso de carregamento. Para isto, precisamos dar um caminho ao nosso componente na opção loading. Então, o nosso componente será chamado diretamente pela Nuxt.

O nosso componente tem de expor alguns desses métodos:

Método Obrigatório Descrição
start() Obrigatório Chamada quando uma rota é alterada, é aqui que apresentamos o nosso componente.
finish() Obrigatório Chamada quando uma rota é carregada (e os dados são obtidos), é aqui que escondemos o nosso componente.
fail(error) Opcional Chamada quando não foi possível carregar uma rota (não foi possível obter os dados, por exemplo).
increase(num) Opcional Chamada durante o carregamento do componente de rota, num é um número inteiro < 100.

Podemos criar o nosso componente personalizado em 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, atualizamos o nosso nuxt.config.js para dizer a Nuxt para usar o nosso componente:

nuxt.config.js
export default {
  loading: '~/components/LoadingBar.vue'
}

A Propriedade do Indicador de Carregamento

Ao executar a Nuxt no modo de aplicação de página única, não existe conteúdo do lado do servidor no primeiro carregamento da página. Assim, em vez de mostrar uma página em branco enquanto a página carrega, a Nuxt dá-nos um componente giratório que podemos personalizar para adicionar as nossas próprias cores ou fundo e até mudar o indicador:

nuxt.config.js
export default {
  loadingIndicator: {
    name: 'circle',
    color: '#3B8070',
    background: 'white'
  }
}

Indicadores Embutidos

Estes indicadores são importados do incrível projeto SpinKit . Podemos consultar a sua página de demonstração para pré-visualizar os componentes giratórios. Para utilizar um destes componentes giratórios, só temos de adicionar o seu nome à propriedade name. Não é necessário importar ou instalar nada. Eis uma lista de indicadores embutidos que podemos utilizar:

  • '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 precisarmos do nosso próprio indicador especial, um valor de sequência de caracteres (String) ou uma chave de nome (Name) também pode ser um caminho para um modelo de marcação de hipertexto do código-fonte do indicador! Todas as opções também são passadas para o modelo de marcação de hipertexto.

O código-fonte do componente de carregamento embutido da Nuxt também está disponível se precisarmos duma base!