为什么这在HTTP上有效,但在HTTPClient上无效?

时间:2018-09-24 12:15:28

标签: angular angular-cli

我是编程新手。因此,我有一个API服务,该服务具有getJSON这样的发送数据的方法

{ "records" : [
        {
            "id" : "1",
            "name" : "aa"
        },
        {
            "id" : "2",
            "name" : "bb"
        },
        ...
    ]
}

我正在尝试使用角度CLI将数据获取到我的项目中。这是每个文件中的

//name.ts
export interface Name {
    id: number;
    name: string;
}

//name.service.ts
...
constructor(private _http: Http) { }

getName(): Observable<Name[]> {
    return this._http.get(this._url).pipe(map((res: Response) => res.json()));
}
...

//app.component.ts
...
names: Name[];

constructor(private _nameService: nameService) { }

ngOnInit() {
    this._nameService.getName().subscribe(data => this.names = data['records']);
}

这很好。但是,如果我使用的是HttpClient模块,请将getName()内部的name.service.ts函数更改为此:

//name.service.ts after getName() change
...
constructor(private _http: HttpClient) { }

getName(): Observable<Name[]> {
    return this._http.get<Name[]>(this._url);
}
...

突然我得到了空名单。我做错了什么?我应该摆脱<Name[]>从而变成return this._http.get(this._url);吗?但是,这会引发错误并且无法编译。

1 个答案:

答案 0 :(得分:-1)

尝试一下

服务

getName(): Observable<Name[]> {
    return this._http.get(this._url).pipe(map((res: any) => res['records']));
}

组件

ngOnInit() {
    this._nameService.getName().subscribe(data => this.names = data);
}