Vue.js para iniciantes, lição 3: renderização condicional

Continuamos nosso curso de treinamento em Vue, que foi recomendado por Natalia Teplukhina, engenheira de equipe do Gitlab e membro da equipe principal do framework Vue (a sessão de perguntas e respostas com Natasha ocorreu em nosso Instagram , e você pode ler a transcrição aqui ).



Na terceira lição, falaremos sobre renderização condicional. Como exibir algo na página somente se alguma condição for atendida.







Vue.js para iniciantes lição 1: instância Vue

Vue.js para iniciantes, lição 2: atributos de vinculação

Vue.js para iniciantes lição 3: renderização condicional

Vue.js para iniciantes lição 4: exibição de listas

Vue .js para iniciantes lição 5: processamento de eventos

Vue.js para iniciantes lição 6: ligando classes e estilos

Vue.js para iniciantes lição 7: propriedades calculadas

Vue.js para iniciantes lição 8: componentes



O propósito da lição



Precisamos de uma inscrição no cartão do produto que informe ao visitante se o produto está em estoque ou não. Se o produto estiver em estoque, uma inscrição deve ser exibida In Stock. Se não estiver em estoque - uma inscrição Out of Stock. A decisão de exibir uma inscrição específica deve ser feita com base nos dados armazenados no aplicativo.



Código inicial



Aqui está o código com o qual vamos começar. Está, como sempre, no arquivo index.html, na tag <body>:



<div id="app">
  <div class="product">
    <div class="product-image">
      <img :src="image" />
    </div>

    <div class="product-info">
      <h1>{{ product }}</h1>
    </div>
  </div>
</div>


No arquivo main.js, ao configurar uma instância Vue, o seguinte objeto de dados será usado:



data: {
    product: "Socks",
    image: "./assets/vmSocks-green.jpg",
    inStock: true
}


Observe que datauma nova propriedade foi adicionada ao objeto . Esta é uma propriedade inStockque possui um valor booleano true.



Tarefa



Ao desenvolver aplicativos da web, muitas vezes é necessário que um elemento seja exibido na página, dependendo do cumprimento de uma determinada condição. Por exemplo, se o estoque de um item acabou, você precisa informar sobre isso no cartão do item.



As mensagens correspondentes são planejadas para serem emitidas como elementos <p>. Isso significa que em algum lugar index.htmlhaverá os seguintes elementos:



<p>In Stock</p>
<p>Out of Stock</p>


Nossa tarefa é retirar um deles no caso de a mercadoria estar em estoque, e o outro em uma situação em que a mercadoria não esteja em estoque.



A solução do problema



No Vue, a solução para esse problema parece simples e direta.



Como você já sabe, os dados indicativos da presença ou ausência de mercadoria em estoque estão descritos em main.js, no objeto data:



inStock: true


Para informar ao sistema qual elemento <p>renderizar, podemos usar as diretivas v-ife v-else. Isso significa que o index.htmlseguinte se enquadrará em :



<p v-if="inStock">In Stock</p>
<p v-else>Out of Stock</p>


Se inStockcontiver um valor verdadeiro, o primeiro item será impresso <p>. Caso contrário, o segundo item será exibido. No nosso caso inStock, o valor está escrito e true, portanto, será exibido In Stock.





Temos estoques em estoque.



Ótimo! Acabamos de usar a renderização condicional para exibir detalhes do produto. Resolvemos o problema. Mas não vamos parar por aí e continuar nossa exploração da renderização condicional.



Diretiva V-else-if



Nosso mecanismo de renderização condicional com base nas diretrizes v-ife v-elsepode ser expandido adicionando um outro nível de lógica. Isso pode ser feito usando a diretiva v-else-if. Para demonstrar isso, vamos complicar um pouco nosso exemplo.



Suponha que o objeto data, em main.js, tenha informações sobre a quantidade de mercadorias. Eles são armazenados na propriedade inventory:



inventory: 100


Ao analisar essa propriedade usando expressões JavaScript entre aspas, podemos fornecer informações mais precisas do produto aos visitantes da página:



<p v-if="inventory > 10">In stock</p>
<p v-else-if="inventory <= 10 && inventory > 0">Almost sold out!</p>
<p v-else>Out of stock</p>


Nessa situação, o primeiro elemento será mostrado na página <p>, pois a expressão correspondente acaba sendo verdadeira.



Diretiva V-show



Se um determinado elemento da página precisa ser ocultado e exibido com frequência, significa que, para implementar esse mecanismo, faz sentido examinar a diretiva v-show. Um elemento com tal diretiva sempre estará presente no DOM, mas será visível apenas se a condição passada para a diretiva for verdadeira. Na verdade, estamos falando sobre o fato de que, graças ao uso desta diretiva, uma propriedade CSS será aplicada ao elemento, por condição display: none.



Este método oferece melhor desempenho do que gerenciar itens usando v-ife v-else.



A aplicação desta diretiva se parece com isto:



<p v-show="inStock">In Stock</p>


A solução para o nosso problema, em que as diretrizes v-ife foram utilizadas v-else, nos convém. Portanto, vamos nos concentrar nisso e não vamos mudar nada.



Oficina



Adicione uma propriedade ao objeto de dados onSale. Deve ser usado para controlar a renderização de um elemento <span>que exibe texto On Salee informa os visitantes sobre a venda.



Aqui está um modelo que você pode usar para resolver esse problema.



Aqui está a solução para o problema.



Resultado



Hoje você aprendeu sobre renderização condicional usando Vue. Ou seja, era sobre o seguinte:



  • Existem diretivas Vue que permitem renderizar elementos condicionalmente:



    • v-if
    • v-else-if
    • v-else
    • v-show
  • Ao trabalhar com diretivas, você pode usar expressões JavaScript que são passadas a eles entre aspas.
  • Se a expressão passada para a diretiva entre aspas for verdadeira, o item será gerado.
  • A diretiva v-showafeta apenas a visibilidade de um elemento, ela não insere elementos no DOM e não remove elementos do DOM.


Você tem algum problema que você, tendo começado a conhecer o Vue, já está planejando resolver com a ajuda deste framework?



Vue.js para iniciantes lição 1: instância Vue

Vue.js para iniciantes, lição 2: atributos de vinculação

Vue.js para iniciantes lição 3: renderização condicional

Vue.js para iniciantes lição 4: renderização de listas

Vue .js para iniciantes lição 5: processamento de eventos

Vue.js para iniciantes lição 6: classes e estilos de ligação

Vue.js para iniciantes lição 7: propriedades calculadas

Vue.js para iniciantes lição 8: componentes






All Articles