Angular ionic 2中数组列表中的两级项
我有一个项目数组列表:Angular ionic 2中数组列表中的两级项,angular,typescript,ionic2,Angular,Typescript,Ionic2,我有一个项目数组列表: items = [ {id: '1', title: 'item 1'}, {id: '2', title: 'item 2'}, ] 例如,我想将类别添加到此列表并基于此进行筛选 -items -- cat1 --- item 1 --- item 2 -- cat2 --- item 1 --- item 2 -- cat3 --- item 1 --- item 2 另外,如何更改ngFor代码以选择cat <ion-list>
items = [
{id: '1', title: 'item 1'},
{id: '2', title: 'item 2'},
]
例如,我想将类别添加到此列表并基于此进行筛选
-items
-- cat1
--- item 1
--- item 2
-- cat2
--- item 1
--- item 2
-- cat3
--- item 1
--- item 2
另外,如何更改ngFor代码以选择cat
<ion-list>
<ion-item *ngFor="let item of items" (click)="clicked($event, item)">
<h2>{{item.title}}</h2>
</ion-item>
</ion-list>
clicked (event, item){
console.log(item.title);
}
{{item.title}
已单击(事件、项目){
控制台日志(项目名称);
}
如果要添加类别,则您的项数组将如下所示:
this.items = [
{
id: 1,
title: 'Category 1',
items : [
{id: 1, title: 'item 1'},
{id: 2, title: 'item 2'}
]
},
{
id: 2,
title: 'Category 2',
items : [
{id: 3, title: 'item 3'},
{id: 4, title: 'item 4'}
]
},
{
id: 3,
title: 'Category 3',
items : [
{id: 5, title: 'item 5'},
{id: 6, title: 'item 6'}
]
}
];
<ion-list no-lines>
<ion-item *ngFor="let item of items" (click)="clicked($event, item)">
Title: {{ item.title }} - Id: {{ item.id }}
<p *ngFor="let subitem of item.items" no-lines>
<span>Title: {{ subitem.title }} - Id: {{ subitem.id }}</span>
</p>
</ion-item>
</ion-list>
<ion-list>
<ion-item>
<button (click)="showCategory(1)">Show Cat 1</button>
<button (click)="showCategory(2)">Show Cat 2</button>
<button (click)="showCategory(3)">Show Cat 3</button>
<button (click)="showCategory(-1)">Show All</button>
</ion-item>
</ion-list>
<ion-list no-lines>
<ion-item *ngFor="let item of (items | categoryFilter:selectedCategoryId)" (click)="clicked($event, item)" >
Title: {{ item.title }} - Id: {{ item.id }}
<p *ngFor="let subitem of item.items" no-lines>
<span>Title: {{ subitem.title }} - Id: {{ subitem.id }}</span>
</p>
</ion-item>
</ion-list>
您可以使用两个嵌套的*ngFor
来打印项
数组,如下所示:
this.items = [
{
id: 1,
title: 'Category 1',
items : [
{id: 1, title: 'item 1'},
{id: 2, title: 'item 2'}
]
},
{
id: 2,
title: 'Category 2',
items : [
{id: 3, title: 'item 3'},
{id: 4, title: 'item 4'}
]
},
{
id: 3,
title: 'Category 3',
items : [
{id: 5, title: 'item 5'},
{id: 6, title: 'item 6'}
]
}
];
<ion-list no-lines>
<ion-item *ngFor="let item of items" (click)="clicked($event, item)">
Title: {{ item.title }} - Id: {{ item.id }}
<p *ngFor="let subitem of item.items" no-lines>
<span>Title: {{ subitem.title }} - Id: {{ subitem.id }}</span>
</p>
</ion-item>
</ion-list>
<ion-list>
<ion-item>
<button (click)="showCategory(1)">Show Cat 1</button>
<button (click)="showCategory(2)">Show Cat 2</button>
<button (click)="showCategory(3)">Show Cat 3</button>
<button (click)="showCategory(-1)">Show All</button>
</ion-item>
</ion-list>
<ion-list no-lines>
<ion-item *ngFor="let item of (items | categoryFilter:selectedCategoryId)" (click)="clicked($event, item)" >
Title: {{ item.title }} - Id: {{ item.id }}
<p *ngFor="let subitem of item.items" no-lines>
<span>Title: {{ subitem.title }} - Id: {{ subitem.id }}</span>
</p>
</ion-item>
</ion-list>
在这里,我们使用自定义管道仅在循环中包含id
与selectedCategoryId
匹配的类别。您可以在CategoryFilter
code中看到:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'categoryFilter' })
export class CategoryFilter implements PipeTransform {
transform(items: any[], selectedId: number): any {
if(selectedId === -1)
return items;
return items.filter(item => item.id === selectedId);
}
}
我不知道您想要完成什么,但是如果您不想显示按钮,您可以在页面的构造函数中设置selectedCategoryId
。同样,您可以在中找到该代码。如果您要添加类别,则您的项
数组如下所示:
this.items = [
{
id: 1,
title: 'Category 1',
items : [
{id: 1, title: 'item 1'},
{id: 2, title: 'item 2'}
]
},
{
id: 2,
title: 'Category 2',
items : [
{id: 3, title: 'item 3'},
{id: 4, title: 'item 4'}
]
},
{
id: 3,
title: 'Category 3',
items : [
{id: 5, title: 'item 5'},
{id: 6, title: 'item 6'}
]
}
];
<ion-list no-lines>
<ion-item *ngFor="let item of items" (click)="clicked($event, item)">
Title: {{ item.title }} - Id: {{ item.id }}
<p *ngFor="let subitem of item.items" no-lines>
<span>Title: {{ subitem.title }} - Id: {{ subitem.id }}</span>
</p>
</ion-item>
</ion-list>
<ion-list>
<ion-item>
<button (click)="showCategory(1)">Show Cat 1</button>
<button (click)="showCategory(2)">Show Cat 2</button>
<button (click)="showCategory(3)">Show Cat 3</button>
<button (click)="showCategory(-1)">Show All</button>
</ion-item>
</ion-list>
<ion-list no-lines>
<ion-item *ngFor="let item of (items | categoryFilter:selectedCategoryId)" (click)="clicked($event, item)" >
Title: {{ item.title }} - Id: {{ item.id }}
<p *ngFor="let subitem of item.items" no-lines>
<span>Title: {{ subitem.title }} - Id: {{ subitem.id }}</span>
</p>
</ion-item>
</ion-list>
您可以使用两个嵌套的*ngFor
来打印项
数组,如下所示:
this.items = [
{
id: 1,
title: 'Category 1',
items : [
{id: 1, title: 'item 1'},
{id: 2, title: 'item 2'}
]
},
{
id: 2,
title: 'Category 2',
items : [
{id: 3, title: 'item 3'},
{id: 4, title: 'item 4'}
]
},
{
id: 3,
title: 'Category 3',
items : [
{id: 5, title: 'item 5'},
{id: 6, title: 'item 6'}
]
}
];
<ion-list no-lines>
<ion-item *ngFor="let item of items" (click)="clicked($event, item)">
Title: {{ item.title }} - Id: {{ item.id }}
<p *ngFor="let subitem of item.items" no-lines>
<span>Title: {{ subitem.title }} - Id: {{ subitem.id }}</span>
</p>
</ion-item>
</ion-list>
<ion-list>
<ion-item>
<button (click)="showCategory(1)">Show Cat 1</button>
<button (click)="showCategory(2)">Show Cat 2</button>
<button (click)="showCategory(3)">Show Cat 3</button>
<button (click)="showCategory(-1)">Show All</button>
</ion-item>
</ion-list>
<ion-list no-lines>
<ion-item *ngFor="let item of (items | categoryFilter:selectedCategoryId)" (click)="clicked($event, item)" >
Title: {{ item.title }} - Id: {{ item.id }}
<p *ngFor="let subitem of item.items" no-lines>
<span>Title: {{ subitem.title }} - Id: {{ subitem.id }}</span>
</p>
</ion-item>
</ion-list>
在这里,我们使用自定义管道仅在循环中包含id
与selectedCategoryId
匹配的类别。您可以在CategoryFilter
code中看到:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'categoryFilter' })
export class CategoryFilter implements PipeTransform {
transform(items: any[], selectedId: number): any {
if(selectedId === -1)
return items;
return items.filter(item => item.id === selectedId);
}
}
我不知道您想要完成什么,但是如果您不想显示按钮,您可以在页面的构造函数中设置selectedCategoryId
。同样,您可以在中找到该代码。在打开页面时,如何筛选显示的类别?所以,我会推到项目页面,只想显示的项目只为类别1类别2抱歉,我没有解释好自己。我想让你在一个单独的页面上添加这些按钮,然后你单击它们,它会转到items页面,只显示用户单击的类别。在这种情况下,你可以使用items
数组和类似getItemsByCategory(categoryId:number):any[]{…}的方法创建一个服务
然后按下按钮时,只需将类别ID
作为参数发送到按钮中即可。然后在新页面的构造函数中,获取该参数并调用服务以获取项目。在这种情况下,您不需要管道
。打开页面时,我将如何筛选显示的类别?所以,我会推到项目页面,只想显示的项目只为类别1类别2抱歉,我没有解释好自己。我想让你在一个单独的页面上添加这些按钮,然后你单击它们,它会转到items页面,只显示用户单击的类别。在这种情况下,你可以使用items
数组和类似getItemsByCategory(categoryId:number):any[]{…}的方法创建一个服务
然后按下按钮时,只需将类别ID
作为参数发送到按钮中即可。然后在新页面的构造函数中,获取该参数并调用服务以获取项目。在这种情况下,您不需要管道
。