@terrator

Как заполнить массив объектов Angular 5 из json'a?

Есть массив объектов appReferenceData: AppReferenceData[] = [];

Каждый объект объект вида

export class AppReferenceData {
  public id: string;
  public value: string;
  public _is_actual: boolean;

  constructor(id: string, value: string, _is_actual: boolean) {
    this.id = id;
    this.value = value;
    this._is_actual = _is_actual;
  }
}


но в json ответе от сервера содержатся объекты, имеющие
"id":"d5387a86-faa7-4ac3-bc50-ff187a22860f","value":"asfgh12","_is_actual":true,"_user_ip":null,"_user_login":null,"_user_browser":null
и т.д.

Вобщем для каждого объекта нужно выбрать только часть полей, записать в объект и сам объект в массив.
Я пробовал так:
this.appReferenceService.GetAppReferenceData(this.selector).subscribe(((res: AppReferenceData[]) => this.appReferenceData = res));
this.appReferenceService.GetAppReferenceData(this.selector).subscribe(res => this.appReferenceData = res as AppReferenceData[]);

Кидает ошибку Error trying to diff 'too many bla bla' Only arrays and iterables are allowed
(В Angular 5 больше нет .json())

Можно конечно написать
this.appReferenceService.GetAppReferenceData.subscribe(res => this.appReferenceData = JSON.parse(res.toString()));

Но может есть более красивый/правильный способ? Почему ангулар не может автоматически вытащить и записать только нужные данные, просто отбросив лишнее?

Этот пример искусственный, на самом деле есть объект в котором 20+ полей а в Json прилетает 30+, поэтому перечислять каждое не вариант
  • Вопрос задан
  • 1292 просмотра
Пригласить эксперта
Ответы на вопрос 1
@terrator Автор вопроса
пишет ошибку
ERROR TypeError: res.map is not a function
    at SafeSubscriber.eval [as _next] (directory.component.ts:84)
    at SafeSubscriber.__tryOrUnsub (Subscriber.js:240)
    at SafeSubscriber.next (Subscriber.js:187)
    at Subscriber._next (Subscriber.js:128)
    at Subscriber.next (Subscriber.js:92)
    at MapSubscriber._next (map.js:85)
    at MapSubscriber.Subscriber.next (Subscriber.js:92)
    at FilterSubscriber._next (filter.js:90)
    at FilterSubscriber.Subscriber.next (Subscriber.js:92)
    at MergeMapSubscriber.notifyNext (mergeMap.js:151)
хотя оператор импортирован и при компиляции ошибок и варнингов нет

версия "rxjs": "^5.4.2",
"@angular/common": "^5.1.2",
"typescript": "~2.5.3"

правда в коде еще параллельно живет старый Http т.к. сейчас с него на пятую версию перехожу.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы