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

ng-repeat e chave estrangeira

Boa tarde a todos!

Tenho uma dúvida, espero que alguém possa me ajudar.

Nesse exemplo da aula, na listagem das fotos, usamos o ng-repeat para carregar o conteúdo do cadastro de cada figura no seu painel:

Editar Remover

A dúvida é a seguinte, caso eu quisesse mostrar o nome da categoria vinculada nesse painel, como eu deveria proceder?

Desde já agradeço a atenção!

5 respostas

desculpa, percebi agora que a parte do código não foi.

<div class="row">
    <meu-painel class="col-md-2 painel-animado" ng-repeat="foto in fotos | filter: filtro" titulo="{{foto.titulo}}">
        <minha-foto url="{{foto.url}}" alt="{{foto.titulo}}"></minha-foto>
        <a class="btn btn-primary btn-block" href="/fotos/edit/{{foto._id}}">Editar</a>
        <meu-botao-perigo nome="Remover" acao="remover(foto)">Remover</meu-botao-perigo>
    </meu-painel>
</div>

Oi Marcelo, deixa eu ver se entendi. Hoje a categoria é um ID em foto e você quer exibir o nome da categoria, certo? Se for isso, isso não tem relação alguma com AngularJS, mas sim com o backend, ou seja, sua API. No backend, você retornaria a foto e na propriedade foto.categoria você teria o JSON da categoria com seus dados.

É isso mesmo Flávio.

Deixa eu ver se entendi também .. rs

Em uma aplicação com banco de dados relacional eu faria uma nova consulta:

SELECT f.titulo, f.url, f.grupo, g.nome FROM foto f INNER JOIN grupo g ON f.grupo = g.grupo

E a partir dessa consulta eu mostraria os painéis preenchidos com todos os dados da foto e os dados relacionados do grupo, nesse caso o nome do grupo.

Nesse caso do back-end node, ele disponibiliza recursos através de requisições get, nesse caso em específico tem o recurso lista que da um model.find() em Foto.

A ideia seria eu criar um novo recurso que disponibilize as fotos com os grupos ja vinculados?

api.lista = function(req, res) { model.find() .then(function(fotos) { res.json(fotos); etc ...

Tipo assim:

api.listaComGrupos = function(req, res) { model.find() .then(function(fotos) { res.json(fotos); etc ...

Se a ideia for essa, me da uma dica de como ficaria esse find com mongodb.

Eu achei que daria pra fazer através das tags como no caso do ng-options ja que o recurso de foto e de categoria já estão disponíveis nos seus respectivos controllers.

<div class="form-group"> <label>Grupo</label> <select name="grupo" ng-model="foto.grupo" class="form-control" required ng-controller="GruposController" ng-options="grupo._id as (grupo.nome | uppercase) for grupo in grupos"> <option value="">Escolha um grupo</option> </div>

Desde já agradeço a atenção, abs!

solução!

Faça um find normal para foto. Depois itere na lista de foto e para cada id de categoria busque a categoria.

Ou você muda tudo e sempre grava a foto com a categoria e não seu id.

Perfeito Flavio, nesse exemplo a melhor solução parece ser colocar o campo dentro da mesma coleção, em alguns cenários vai ser melhor utilizar um banco de dados relacional. Obrigado pela atenção! Abs!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software