Angular 为什么删除和新添加子组件会调用ObjectUnsubscriberRor?

Angular 为什么删除和新添加子组件会调用ObjectUnsubscriberRor?,angular,typescript,rxjs,behaviorsubject,angular8,Angular,Typescript,Rxjs,Behaviorsubject,Angular8,在父组件中,我有一个列表: items: SomeType; 此列表从服务获取it值: this.someService.items$.subscribe(items => { this.items = items; }); 在某些情况下,此列表会更新为新标准: this.someService.getData(this.criteria); 这个很好用 还有一个子组件,为该列表中的每个元素插入: <ul *ngFor="for let item of items">

在父组件中,我有一个列表:

items: SomeType;
此列表从服务获取it值:

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>
当父组件中的标准更改并且再次加载项目列表时,子组件将失败,并显示以下错误消息:

错误 消息:“对象已取消订阅” 名称:“ObjectUnsubscribedError”


当我删除
this.someOtherService.mapping$.unsubscribe()时
在子组件的
ngondestory
方法中,它再次工作。但是当组件被销毁时,我不应该取消订阅吗?

您取消订阅child的方式是不正确的。您取消订阅的是可观察的,而不是订阅。应该是,

sosSubscription:订阅;
恩戈尼尼特(){
this.sosSubscription=this.someOtherService.mapping$.subscribe(mapping=>{
this.mapping=映射;
});
}
恩贡德斯特罗(){
此.sosubscription.unsubscribe();
}

哦,这很有道理。我想如果我直接从BehaviorSubject取消订阅,我可以跳过添加一个额外的变量。这是一个很好的例子,解释了当你取消订阅某个主题时会发生什么。