Почему это работает на HTTP, а не на HTTPClient? - PullRequest
0 голосов
/ 24 сентября 2018

Я новичок в программировании.Итак, у меня есть служба API, в которой есть метод get, отправляющий данные в формате JSON, например:

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

Я пытаюсь получить данные для своего проекта с помощью углового интерфейса командной строки.Вот внутри каждого файла

//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 голосов
/ 24 сентября 2018

Попробуйте это

сервис

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

компонент

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