如何使用TS/Angular进行过滤
ts中的数据模型:如何使用TS/Angular进行过滤,angular,typescript,Angular,Typescript,ts中的数据模型: export class PO { id: number; name: string; submitted: boolean = false; } 服务,获取所有POs getPO() { return this.http .get<PO[]>(this.poUrl) .pipe(map(data => data), catchError(this.handleError)); } getPO(){ 返回此
export class PO {
id: number;
name: string;
submitted: boolean = false;
}
服务,获取所有POs
getPO() {
return this.http
.get<PO[]>(this.poUrl)
.pipe(map(data => data), catchError(this.handleError));
}
getPO(){
返回此文件。http
.得到(这个.撅嘴)
.pipe(map(data=>data),catchError(this.handleError));
}
要仅获取那些submitted=true,请执行以下操作:
getSubmitted(){
返回此文件。http
.得到(这个.撅嘴)
.pipe(map(data=>data.find(data=>data.submitted==true)),catchError(this.handleError));
}
它仍然返回所有内容,尝试了data.filter(),但查找/筛选无效。根据
getSubmitted()
结果的完整程度>如果您的数据模型对象名为PO
,并且结果通过一个名为PO
的变量循环,那么变量冲突可能会出现问题。或者对PO[]
类型的局部变量的赋值根本没有发生。尝试使用布尔值true
的submitted
属性过滤和呈现PO
对象:
getSubmitted() {
return this.http
.get<PO[]>(this.poUrl)
.pipe(
// tap(response => console.log(response)), to check/log structure before map()
// assumes along lines of [{id:1, name:'foo', submitted:false}, {id:2, name:'bar', submitted:true}]
map(data => data.filter(d => d.submitted)),
catchError(this.handleError)
);
}
或:
提交:采购订单[]=[];
恩戈尼尼特(){
这个.getSubmitted()
.subscribe(submitted=>this.submitted=submitted);
}
//
下面是一个基于PO
的submitted
对象属性的过滤功能。它提供了一个带有和不带的示例
希望这有帮助 您正在修改前端的API响应。在不同的平台上进行管理将很困难。我更喜欢创建两个WebAPI服务。 一个用于获取已提交数据的标志为true。 标志为false的第二个服务 原因:未来如果你计划开发移动应用程序,那么你也必须在移动应用程序中硬编码你的逻辑 服务数据应该是直接的
data;
filteredData;
getPO() {
return this.http.get<PO[]>(this.poUrl).subscribe(
data => {
this.data = data;
this.filteredData = data;
}
);
}
getSubmitted() {
this.filteredData = this.data.filter( el => el.submitted === true);
}
这样你就不用下载两次了
警告***筛选器必须位于专用数组上,而不是从http调用返回的数据。您可能需要提供一个示例,说明在使用
map()
之前,数据是如何专门为您输入的。在执行map()
之前,您可以利用tap()
来控制台记录数据。另外,find()
最多只能返回数组中的一个元素。@AlexanderStaroselsky同意find(),但也尝试了filter()。您可能希望显示getSubmitted()
是如何执行的,以及组件中消耗的数据,以获得完整的图片。组件:ngOnInit(){this.getSubmitted();}
html:- …
确保响应实际上是数据。您还可以使用rxjs过滤器
,而不是使用映射
,然后使用JavaScript数组过滤器
。
submitted$: Observable<PO[]>;
ngOnInit() {
this.submitted$ = this.getSubmitted();
}
// <li *ngFor="let p of submitted$ | async">
submitted: PO[] = [];
ngOnInit() {
this.getSubmitted()
.subscribe(submitted => this.submitted = submitted);
}
// <li *ngFor="let p of submitted">
data;
filteredData;
getPO() {
return this.http.get<PO[]>(this.poUrl).subscribe(
data => {
this.data = data;
this.filteredData = data;
}
);
}
getSubmitted() {
this.filteredData = this.data.filter( el => el.submitted === true);
}
*ngFor="let row of filteredData"