Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用TS/Angular进行过滤_Angular_Typescript - Fatal编程技术网

如何使用TS/Angular进行过滤

如何使用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(){ 返回此

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(){
返回此文件。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"