当我选择第一个的第一个父级孩子数组时,它正在选择其他所有父级孩子。我知道这是因为索引0对所有人仍然相同。我如何从孩子中选择特定的一个并突出显示它。
我曾尝试比较父级和子级的索引,但是即使这样我也无法选择子级数组中的特定子项。
home.html
<style>
.highlight {
background-color:#777;
}
</style>
<ion-item *ngFor="let date of testList">
{{date.date}}
<ion-item *ngFor="let item of date.item; let i= index" [class.highlight]="i == selectedOne" (tap)="onSelected(i)">
{{item.name}}
</ion-item>
</ion-item>
home.ts
public testList: any[] = [
{
date: 'test1',
item: [ {
name:'tony',
id:23
},
{
name:'shawn',
id:12
},
{
name:'rancho',
id:33
}
]
},
{
date: 'test2',
item: [ {
name:'Monty',
id:345
},
{
name:'Bob',
id:321
},
{
name:'Dexter',
id:324
}
]
},
{
date: 'test3',
item: [ {
name:'Trillo',
id:234
},
{
name:'Stenly',
id:12
},
{
name:'Destro',
id:123
}
]
}
]
public selectedOne: boolean
onSelected(index) {
if (this.selectedOne != index) {
this.selectedOne = index;
} else {
this.selectedOne = null;
}
}
答案 0 :(得分:3)
我将首先向列表中显示的每个项目添加一个选定的属性,尽管我将其移至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
中包含false
,则将其设置为true,反之亦然。
修改
定义清除功能以清除所有内容,就像迭代到所有位均为假的第一位一样。
onSelected(item, parent)
{
this.testList.forEach(data => data.item.forEach(each =>
{ each.selected = false; }));
item.selected ? item.selected = false : item.selected = true;
}
答案 1 :(得分:1)
检查 WORKING STACKBLITZ
您的home.html
如下所示:〜
<ion-header>
<ion-navbar>
<ion-title>Home</ion-title>
</ion-navbar>
</ion-header>
<style>
.highlight {
background-color: #777;
}
</style>
<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.id == selectedOne" (tap)="onSelected(item)">
{{item.name}}
</ion-item>
</ion-item>
</ion-content>
您的home.ts
onSelected方法如下:〜
onSelected(item) {
this.selectedOne = item.id;
}
答案 2 :(得分:0)
将selectedOne变量更改为Object
public selectedOne = {id: 12, name: 'Stenly'};
并在循环[class.highlight]="(item.id == selectedOne.id && item.name == selectedOne.name)"
<ion-item *ngFor="let item of date.item; let i= index" [class.highlight]="(item.id == selectedOne.id && item.name == selectedOne.name)" (tap)="onSelected(i)">
{{item.name}}
</ion-item>