Mam powtórzenie ng, które wyświetla listę divs
, a po kliknięciu na jeden wyświetla się adnotacja div
dla klikniętego elementu.ng-repeat: pokazanie elementu kliknięcia i ukrycie pozostałych
To działa
<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>
Moje elementy są ładowane z JSON zawierającego listę pozycji i każda pozycja posiada domyślną Attribut showfull
zestaw do false
w tym json. To działa, ale teraz chcę ukryć wszystkie inne elementy na liście po kliknięciu elementu. Mam tryied coś takiego:
To nie działa
<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>
iw sterowniku Dodałem funkcję:
$scope.expand = function(e) {
e.showfull = !e.showfull;
//TODO: put here a foreach logic to hide all other items
}
ale nawet bez logiki to foreach nie działa, element nie pokazuje dodatkowego div po kliknięciu. Mam dwa pytania:
Przypuszczam, jest to spowodowane
item
są „przekazywane przez kopię” w funkcjiexpand
lub jakiś zakres kwestii izolacji ale możesz mi wyjaśnić, dlaczego w szczegółach? SOLVEDJak mogę ukryć wszystkie dodatkowe div innych przedmiotów po kliknięciu elementu i pokazać źródło dodatkowego treści na tym sprzęcie? Czy muszę zrobić dyrektywę? nie rozwiązała
Dzięki
Dzięki, że wydaje się działać, co się stanie, jeśli nie odwołuję się do pozycji w kątowym punktu widzenia? Angular nie łączy elementów do akcji ng-show? – deKajoo
@deKajoo, jeśli nie odwołujesz się do tego przedmiotu, byłbyś przeciwny '$ scope.showfull' – Vadim
Drugie pytanie: aby ukryć wszystkie inne elementy, powinienem użyć' kątowego.forsuń' w funkcji kontrolera lub czy istnieje lepszy sposób ? (edytuj: dzięki za pierwszą odpowiedź) – deKajoo