Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Como percorrer um objeto Json com subníveis através do v-for

Boa tarde pessoal. Tenho uma dúvida que acredito ser simples mas estou com uma vcerta dificuldade.

Tenho uma promisse que retorna um json com id, nome e endereço. Contudo, no endereço ele me retorna um array com posicoes onde encontra-se rua, n, bairro, e cidade.

Segue um exemplo:

id : "c_242545",
nome : "Teste de produto 1",
endereco: [
    {rua: "Rua x21"},
    {numero: 35},
    {bairro: "Nova Conceição"},
    {cidade: "São Paulo"},
]

Como faço para montar uma li neste caso. tenho esse exemplo:

<li class="lista-dados-item" v-for="indice in dados">
    <p>{{ indice.id }}</p>
    <p>{{ indice.nome }}</p>
    <h2>Endereço</h2>
    <p> -- RUA -- </p>
    <p> -- NUMERO -- </p>
    <p> --  BAIRRO -- </p>
    <p> -- CIDADE -- </p>
</li>

Agradeço desde ja.

2 respostas
solução!

Bom terá de iterar dentro do indice.endereco.

    <li class="lista-dados-item" v-for="indice in dados">
      <p>{{ indice.id }}</p>
      <p>{{ indice.nome }}</p>
      <h2>Endereço</h2>
      <p class="lista-dados-item" v-for="dado_do_end in indice.endereco">
        {{ Object.keys(dado_do_end)[0] }}: {{ dado_do_end[Object.keys(dado_do_end)[0]] }}
      </p>
    </li>

O maior problema mesmo é como os dados estao organizados. Como o endereco dentro de cada dado é uma lista e sendo um objeto diferente em cada item (ja que em um objeto temos { rua: 'rua qualquer'} e no outro temos { bairro: 'bairro qualquer' }), nao é possível iterar no endereco de forma uniforme.

Na gambiarra acima o Objects.keys() retorna uma lista com os atributos do objeto. Entao na primeira vez vai retorna "rua", na segunda "numero" e assim por diante. E assim conseguimos acessar os dados do endereco.

Uma segunda solução seria iterar mais um nivel abaixo:

    <li class="lista-dados-item" v-for="indice in dados">
      <p>{{ indice.id }}</p>
      <p>{{ indice.nome }}</p>
      <h2>Endereço</h2>
      <p class="lista-dados-item" v-for="dado_do_end in indice.endereco">
        <span v-for="(valor, chave)  in dado_do_end">
          {{ chave }}: {{ valor }}
        </span>
      </p>
    </li>

Sugiro uma mudança na estrutura deste dado da seguinte forma:

id : "c_242545",
nome : "Teste de produto 1",
endereco: {
    rua: "Rua x21",
    numero: 35,
    bairro: "Nova Conceição",
    cidade: "São Paulo"
}

e no template:

    <li class="lista-dados-item" v-for="indice in dados">
      <p>{{ indice.id }}</p>
      <p>{{ indice.nome }}</p>
      <h2>Endereço</h2>
      <p class="lista-dados-item" v-for="(dado_do_end, key) in indice.endereco">
        {{ key }}: {{ dado_do_end }}
      </p>
    </li>

Perfeito, é que na verdade são muitas informações, o que passei foi só uma base e não possuo acesso a api para mudanças. Mas me ajudou muitoo mesmo.

Muito obrigado, agora já consigo trabalhar com outros cenários inclusive. Valewwwww