Подтвердить что ты не робот

Angular 2: много асинхронных труб против одной подписки

Что лучше для производительности и "angular способ": есть много асинхронных каналов в представлении или один подписчик в компоненте с отменой подписки на действие onDestroy?

Пример:

@Component({
  template: `<div> {{ post.title }} {{ post.author.name }} {{ post.category.name }} </div>`
  ...
  })
class AppComponent {
  public post: Post;
  public postSubscription;

  ngOnInit() {
    postSubscription = someObservable.subscribe((post) => {
      this.post = post;
    })
  }

 ngOnDestroy() {
    postSubscription.unsubscribe();
 }
}

или

@Component({
  template: `<div> {{ postTitle | async }} {{ postAuthorName | async }} {{ postCategoryName | async }} </div>`
  ...
  })
class AppComponent {
  public postTitle: Observable<string>;
  public postAuthorName: Observable<string>;
  public postCategoryName: Observable<string>;

  ngOnInit() {
    this.postTitle = someObservable.pluck('title');
    this.postAuthorName = someObservable.pluck('author', 'name');
    this.postCategoryName = someObservable.pluck('category', 'name');
  }
}
4b9b3361

Ответ 1

Использование канала | async более эффективно, поскольку Angular получает уведомления об изменениях. В первом примере привязки проверяются каждый цикл обнаружения изменений.

Ответ 2

Это отличный вопрос. Я часто сталкивался с решением использовать несколько асинхронных труб для одного и того же наблюдаемого, вместо подписки OnInit и отмены подписки onDestroy.