Почему удаление и новое добавление дочернего компонента вызывает ObjectUnsubscribeedError? - PullRequest
1 голос
/ 29 июня 2019

В родительском компоненте У меня есть список:

items: SomeType;

Этот список получает значения из службы:

this.someService.items$.subscribe(items => {
  this.items = items;
});

В какой-то момент этот списокобновляется с новыми критериями:

this.someService.getData(this.criteria);

Это прекрасно работает.


Также есть дочерний компонент , который вставляется для каждого элемента в этом списке:

<ul *ngFor="for let item of items">
  <app-list-item [item]="item"></app-list-item>
</ul>

Это тоже работает нормально, но только в первый раз this.items в родительском компоненте загружается .

дочерний компонент также получает значения из службы:

ngOnInit() {
  this.someOtherService.mapping$.subscribe(mapping => {
    this.mapping = mapping;
  });
}

ngOnDestroy() {
  this.someOtherService.mapping$.unsubscribe();
}

Когда критерии в родительском компоненте изменяются и список элементов загружается снова, дочерний компонент завершается ошибкойс этим сообщением об ошибке:

Сообщение об ошибке: «объект отписан» имя: «ObjectUnsubscribeedError»

Когда я удаляю this.someOtherService.mapping$.unsubscribe(); в дочернем компоненте ngOnDestroy метод, он снова работает.Но не должен ли я unsubscribe, когда компонент будет уничтожен?

1 Ответ

2 голосов
/ 29 июня 2019

способ отписаться о ребенке не является правильным.вы отписываетесь от наблюдаемого, а не от подписки.должно быть;

sosSubscription: Subscription;

ngOnInit() {
  this.sosSubscription = this.someOtherService.mapping$.subscribe(mapping => {
    this.mapping = mapping;
  });
}

ngOnDestroy() {
  this.sosSubscription.unsubscribe();
}
...