У меня есть следующий шаблон с элементами повторения и списком ng. Я пытаюсь держать один элемент открытым в течение времени и исчезать при нажатии. Сейчас только первый элемент списка исчезает, хотя идентификатор descHelp используется для всех элементов. Все идеи?
шаблон:
<div data-ng-repeat="parts in data track by $index">
<li id="title" ng-click='setItem($index);'>
<div class="hblinks" ng-click="showDetails = ! showDetails; " >
<span class="sb-text-title">the title</span>
</div>
<div id ="descHelp" ng-show="showDetails && $index == itemIndex">
в директиве:
$scope.setItem=function(item) {
$scope.itemIndex=item;
var target = $element.find('#descHelp');
target.fadeIn( 600 );
}
Спасибо!
$element.find('#descHelp')
вернет вам только первый элемент с этим id, а не все. Вы должны использовать классы, идентификатор должен использоваться только один раз.
Вы можете использовать ng-if
вместо ng-show
чтобы заставить только один div присутствовать в DOM с этим id в качестве рабочего стола, но я действительно рекомендую.
Лучше построить уникальный идентификатор с помощью объекта $ index, такого как id = "descHelp- {{$ index}}"
Дайте уникальный идентификатор, используя $ index:
<div data-ng-repeat="parts in data track by $index">
<li id="title" ng-click='setItem($index);'>
<div class="hblinks" ng-click="showDetails = ! showDetails; " >
<span class="sb-text-title">the title</span>
</div>
<div id ="descHelp_{{$index}}" ng-show="showDetails && $index == itemIndex">
И передать его контроллеру
$scope.setItem=function(item, index) {
$scope.itemIndex=item;
var target = $element.find('#descHelp_' + index);
target.fadeIn( 600 );
}