角度使用“.filter”

时间:2017-12-11 12:54:55

标签: angular angular-http angular5 angular-httpclient

我尝试过滤数据(获取给定数量的记录)

http.get(baseUrl + 'api/Student/Students1')
.filter( stud => stud.Phone == 123)
.subscribe(data => {
this.studentTEST = data.json() as Students[];
}, error => console.error(error));

但是得到错误:

  

“属性'电话'在”响应“类型上不存在。

angular的版本是4.2.5,但最近在package.json(5.1.0)中更新。 查找

我从asp.net核心控制器获取数据库上下文。

这是我的角度代码:

import { Component, Inject } from '@angular/core';
import 'rxjs/Rx';
import { Http, Response } from '@angular/http';
import { Observable } from 'RxJS';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/filter';


@Component({
    selector: 'fetchdata',
    templateUrl: './fetchdata.component.html'
})
export class FetchDataComponent {

    public studentTEST: Students[];
    public stud: Students[];

    constructor(private http: Http, @Inject('BASE_URL') baseUrl: string) {

    http.get(baseUrl + 'api/Student/Students1')
    .map((response: Response) => response.json() as Students[])
    .filter(stud => stud.Phone === 123);
    //subscribe(result => {
        //this.studentTEST = result.json();
 }


}

export interface Students {
     StdName: string;
     Email: string;
     Phone: number;
     Address: string;
 }

现在错误:

  

“学生[]”类型中不存在“手机”属性。

2 个答案:

答案 0 :(得分:1)

首先,您需要{jinc()的map获取请求或使用httpClient。然后你可以过滤,并从服务中删除你订阅方法。您需要订阅组件,您可以使用| async pipe。

http.get(baseUrl + 'api/Student/Students1') .map((response: Response) => response.json() as Students[]) .filter(stud => stud.Phone === 123);

答案 1 :(得分:1)

后一种错误完全正确:

  

Property 'Phone' does not exist on type 'Students[]'

没有。 Phone上存在Students,而不是Students[]

您实际上需要在地图中设置filter

http.get(baseUrl + 'api/Student/Students1')
 .map(response => response.json().filter(stud => stud.Phone === 123))

然后你在这里返回的内容不再是Students[]类型的回复,所以你需要把它留下来。