Как передать / отобразить Observable в Angular - PullRequest
0 голосов
/ 08 января 2019

Вложенный объект отображается как [объектный объект], поэтому я пытаюсь разыграть его через трубу и карту, но нигде не получаю. Я пробовал модели как классы и интерфейсы, но без помощи. Может кто-нибудь сказать мне, что я делаю не так? Спасибо.

Функция:

  getClients(customerId: number): Observable<Client[]> {
    let clientUrl = 'SOME_URL';
    return this.http.get<Client[]>(clientUrl)
      .pipe(map(client: Client) => client.address as Address);
  }

Модели:

import { Address } from './address.model';

export class Client{
  id: number;
  name: string;
  accountNumber: string;
  addressId: number;
  phoneNumber: string;
  address: Address;
}


export class Address{
  id: number;
  name: string;
  addressLine1: string;
  addressLine2: string;
  city: string;
  postalCode: string;
}

Я получаю ошибку: Ошибка TS2345 (TS) Аргумент типа «Адрес» не может быть назначен параметру типа «OperatorFunction <{}, Client []>».

Ответы [ 2 ]

0 голосов
/ 08 января 2019

1) удалите часть трубопровода из метода getClients ()

2) создайте карту каналов перед подпиской на getClients () или создайте другой метод, который будет выполнять только часть трубопровода с наблюдаемой, возвращаемой из getClients ()

mapToAddress(): Observable<Address[]> {
  this.getClients.pipe(
    map((clients: Client[]) => clients.map(client => client.address))
  )
}

Это важно понимать: когда вы вызываете метод .map () внутри .pipe (), в этом случае вы не получаете ни одного клиента, вы получаете весь массив клиентов, переданный в Observable. Поскольку вы отображаете значения, которые хранятся в Observable, - значения типа: .

Ваша конвейерная карта будет работать на некотором Observable, который генерирует один клиент типа , а не массив.

0 голосов
/ 08 января 2019

Проблема здесь:

getClients(customerId: number): Observable<Client[]> {

Вы запросили функцию для возврата в виде наблюдаемого (массива клиента), но на самом деле вы возвращаете Наблюдаемый из адреса.

.pipe(map(client: Client) => client.address as Address);

Вот почему функция выдает эту ошибку. Заменить наблюдаемое на наблюдаемое

Надеюсь, это поможет, Всего наилучшего!

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