Угловой отклик карты httpClient на сущность с поведением - PullRequest
2 голосов
/ 20 марта 2019

Я пытаюсь отобразить ответ моего GET-запроса на класс сущности.При вызове функции для этого объекта ответа выдается ошибка:

TypeError: res.foo не является функцией

GET-Request:

 this.http.get<TodoEntity>('https://jsonplaceholder.typicode.com/todos/1').subscribe((res) => {
    console.log(res.foo());
  })

Entity-Class:

export class TodoEntity {
 public userId: number;
 public id: number;
 public title: string;
 public completed: boolean;
 public foo(): string {
    return 'Hello world';
 }
}

Есть ли способ сопоставить ответ напрямую с классом сущности и вызвать для него функцию?Или мне нужно вручную создать новый экземпляр TodoEntity на основе объекта ответа?

Я использую машинописный текст 3.1.6 с угловым 7.3.6.

Ответы [ 2 ]

3 голосов
/ 20 марта 2019

Вам необходимо создать экземпляр класса. Методы недоступны, когда вы преобразуете свой JSON в прототипный класс JavaScript / TypeScript.

Edit: Просто нашел хорошее объяснение здесь: https://stackoverflow.com/a/22875957/894532

1 голос
/ 20 марта 2019

Вы можете использовать оператор RxJS 'map для создания экземпляра TodoEntity из набора свойств, возвращаемых веб-службой, используя Object.assign:

this.http.get('https://jsonplaceholder.typicode.com/todos/1').pipe(
  map(res => Object.assign(new TodoEntity(), res))
).subscribe((res: TodoEntity) => {
  console.log(res.foo());
});

Демонстрация: https://stackblitz.com/edit/angular-igaw2q

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...