【发布时间】:2019-10-08 04:50:12
【问题描述】:
我有一个来自 firebase 的列表,我想过滤并显示每个类别下的专业。 When I do console log both the categories and specializations are retrieved, but I can’t figure out what I need to be doing to render specialization in UI when category is selected.任何指导将不胜感激。谢谢。以下是我的作品:
类别.JSON
{ “-Lq2PAU_P-fPniAMrQ85”:{ “名称”:“测试” }, “会计与金融” : { “名称”:“会计与财务” }, “保证审计”:{ “名称”:“鉴证与审计” }, “风险管理” : { “名称”:“风险管理” }, “税收”:{ “名称”:“税收” } }
categories.JSON
{
"accountingFinance" : [ null, "Accounting Management Information Systems", "Accounting Records Maintenance", "Accounts Preparation", "Accountancy / Finance Training" ],
"assuranceAudit" : [ null, "Asset Management Review", "Assurance / Audit Training", "Climate Change / Sustainability Audit", "Enviromental Audit" ],
"riskManagement" : [ null, "Acturial Service", "Enterprise Risk Management", "Fraud Risk Management", "Political Risk Management" ],
"taxation" : [ null, "Business Income Tax", "Capital Gains Tax", "Corporation Tax", "Employee Tax (PAYE)", "Export Incentives" ]
}
HTML 标记
<div class="row">
<div class="col-4">
<div class="list-group">
<a
*ngFor="let c of (category$ | async)"
routerLink="/admin/expert-category" [queryParams]="{ category: c.key }"
class="list-group-item list-group-item-action"
[class.active]="category === c.key">
{{ c.name }}
</a>
</div>
</div>
<div class="col">
<div class="row">
<ng-container *ngFor="let categories of filteredCategories; let i = index">
<div class="col">
<div class="card">
<!--<div class="card-body">-->
<ul class="list-group list-group-horizontal">
<li class="list-group-item">{{ categories }}</li>
</ul>
<!--/div>-->
</div>
</div>
<div *ngIf="(i+1) % 4 === 0" class="-w-100"></div>
</ng-container>
</div>
</div>
</div>
服务.ts
getCategories(): Observable<any[]> {
return this.db.list('/categories')
.snapshotChanges().pipe(
map(actions =>
actions.map(data => ({ key: data.key, ...data.payload.val() }))
));
}
getAll(): Observable<any[]> {
return this.db.list('/category')
.snapshotChanges().pipe(
map(category =>
category.map(cat => {
const key = cat.key;
const payload = cat.payload.val();
return { key, ...payload };
})),
);
}
Component.ts 文件
export class ExpertCategoryComponent implements OnInit {
category$;
category: string;
closeResult: string;
filteredCategories: any[] = [];
specialization: any[] = [];
constructor(
private categoryService: CategoryService,
route: ActivatedRoute,
private router: Router,
private modalService: NgbModal) {
this.categoryService.getCategories().subscribe(specialization => {
this.specialization = specialization;
console.log(this.specialization);
route.queryParamMap.subscribe(params => {
this.category = params.get('category');
this.filteredCategories = (this.category) ? this.specialization.filter(s => s.category === this.category) : this.specialization;
console.log(this.filteredCategories);
});
});
this.category$ = this.categoryService.getAll();
}
当我选择一个类别时,除了控制台中的一个空数组之外,我目前没有收到任何错误。
【问题讨论】:
-
最好的方法是使用自定义管道来过滤任何东西。
-
@Mises 不是根据他们的文档:angular.io/guide/pipes#appendix-no-filterpipe-or-orderbypipe
-
我在您的 JSON 示例中没有看到
category,但您在 (s.category) 中使用它 -
@peinearydevelopment 工作看到了吗? sorting-list-angular.web.app/library
-
@Mises 我添加了一个StackBlitz 说明为什么不建议为此使用管道。