Angular, как обрабатывать несколько наблюдаемых, используемых в шаблоне с асинхронным каналом - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть следующий код

Шаблон:

   <li *ngFor="let message of messages”>
    …
    …
       <img [src]="getThumbnail$(message) | async”>
   </li>

Компонент:

private thumbnails$: { [id: number]: Observable<string> } = {};

getThumbnail$(message: Message): Observable<string> {

  if (message.isImage && message.attachedFileId === undefined) {
    return of(this.getImageBase64(imageTiny));
  }

  if (message.gps && message.imageTiny === undefined) {
    return of(this.getPlaceHolderLocation());
  }

  if (this.thumbnails$[message.id] !== undefined) {
    return this.thumbnails$[message.id];
  }
  const thumbnail$ = new BehaviorSubject<string>(this.getImageBase64(message.imageTiny));
  this.thumbnails$[message.id] = thumbnail$;

  this.loadImageAsync(message,thumbnail$); // this loads the big image and emits the result

  return thumbnail$;
}

Мне интересно, есть ли лучший способ управления наблюдаемыми всписок.Цель миниатюр карты $ здесь состоит в том, чтобы избежать создания новой наблюдаемой каждый раз, когда угловые вызывает метод getThumbnail $.

Нужно ли мне сохранять себя наблюдаемыми?

Могу ли я "контролировать", как и когда angular вызывает этот метод?

Спасибо

...