Ho una ng-repeat che visualizza un elenco di divs
e quando clicco su uno di esso mostra un aditionnal div
per l'elemento cliccato.ng-repeat: mostra un elemento al clic e nasconde gli altri
Questo è il lavoro
<div ng-repeat="item in items">
<div ng-click="showfull = !showfull">
<div>
<h1>{{item.title}}</h1>
<p>{{item.content}}</p>
</div>
</div>
<div ng-show="showfull">
<p>{{item.info}}</p>
</div>
<hr/>
</div>
miei articoli sono caricati da un JSON contenente un elenco di elemento e ogni elemento ha un attribut showfull
insieme predefinito di false
in questo JSON. Funziona, ma ora voglio nascondere tutti gli altri elementi nell'elenco quando si fa clic su un elemento. Ho tryied qualcosa di simile:
questo non sta funzionando
<div ng-repeat="item in items">
<div ng-click="expand(item)">
<div>
<h1>{{item.title}}</h1>
<p>{{item.content}}</p>
</div>
</div>
<div ng-show="showfull">
<p>{{item.info}}</p>
</div>
<hr/>
</div>
e nel controller Ho una funzione di:
$scope.expand = function(e) {
e.showfull = !e.showfull;
//TODO: put here a foreach logic to hide all other items
}
Ma anche senza la logica foreach questo non funziona, l'elemento non mostra il div aggiuntivo quando viene cliccato. Ho due domande:
Suppongo che questo è dovuto al
item
essere "passati dalla copia" nella funzioneexpand
o un qualche tipo di portata problema isolato, ma mi può spiegare perché in dettaglio? risoltoCome posso nascondere tutto il div aggiuntivo di altri oggetti quando scatto una voce e mostrare il contenuto additionnal per questo articolo? Devo fare una direttiva? non risolta
Grazie
Grazie che sembra funzionare, cosa succede se non faccio riferimento all'elemento nel punto di vista angolare? Angolare non collega l'articolo all'azione ng-show? – deKajoo
@deKajoo se non si fa riferimento all'elemento, si andrebbe contro '$ scope.showfull' – Vadim
Seconda domanda: per nascondere tutti gli altri elementi dovrei usare' angular.forEach' nella funzione controller o c'è un modo migliore ? (modifica: grazie per la prima risposta) – deKajoo