Я бы начал с добавления выбранного атрибута к каждому элементу, показанному в списке, вы могли бы сделать это со всем следующим, хотя я бы переместил это в ngOnInit()
.
constructor(public navCtrl: NavController) {
this.testList.forEach(data => data.item.forEach(each =>
{
each.selected = false;
})
)
}
Это будет означать, что вы можете сохранить для каждого объекта, был ли он выбран или нет. Затем измените ваш HTML, чтобы выглядеть следующим образом. Изменения заключаются в том, что при клике вы проходите через элемент и его родителя, а не через индекс, и [class.highlight]
проверяет, что selected
является true
или false
.
<ion-content padding>
<ion-item *ngFor="let date of testList">
{{date.date}}
<ion-item *ngFor="let item of date.item; let i= index"
[class.highlight]="item.selected" (tap)="onSelected(item, date)">
{{item.name}}
</ion-item>
</ion-item>
</ion-content>
И внесите небольшое изменение в функцию, которую вы вызываете при нажатии, это установит selected
true, если оно входит в false
и наоборот.
Редактировать
Определить функцию очистки, чтобы очистить все, так же, как первый бит, повторяющий все, является ложным.
onSelected(item, parent)
{
this.testList.forEach(data => data.item.forEach(each =>
{ each.selected = false; }));
item.selected ? item.selected = false : item.selected = true;
}