在调用ngOnDestroy并取消订阅后,第二次尝试订阅EventEmitter时出现以下错误:
ngOnInit() {
this.route.params.subscribe(params => {
this.resources.eco_id= params['id']
});
this.http.ReloadForm.subscribe(res=>this.OnFormLoad(res));
}
ngOnDestroy(){
this.http.ReloadForm.unsubscribe();
}
core.js:1601错误错误:对象未订阅 在新的ObjectUnsubscribedError(ObjectUnsubscribedError.js:6) 在EventEmitter.push ../ node_modules / rxjs / _esm5 / internal / Subject.js.Subject._trySubscribe中 (Subject.js:86) 在EventEmitter.push ../ node_modules / rxjs / _esm5 / internal / Observable.js.Observable.subscribe (Observable.js:28) 在EventEmitter.push ../ node_modules/@angular/core/fesm5/core.js.EventEmitter.subscribe中 (core.js:3743) 在EcoProcedureFormComponent.push ../ src / app / forms / eco-form / eco-procedure-form.component.ts.EcoProcedureFormComponent.ngOnInit (eco-procedure-form.component.ts:57) 在checkAndUpdateDirectiveInline(core.js:10105) 在checkAndUpdateNodeInline(core.js:11371) 在checkAndUpdateNode(core.js:11333) 在prodCheckAndUpdateNode(core.js:11877) 在Object.eval [作为updateDirectives](EcoProcedureFormComponent_Host.ngfactory.js:10)
在ngOnDestroy上没有取消订阅的情况下,一切正常,但是我必须以某种方式释放订阅。
我该如何解决?
谢谢
答案 0 :(得分:3)
您应该添加一个Subscription变量,并为其分配订阅,然后在ngOnDestroy中通过取消订阅该变量来释放该订阅。
像这样的东西:
routesSubscription: Subscription;
serviceSubscription: Subscription;
ngOnInit() {
this.routesSubscription= this.route.params.subscribe(params => {
this.resources.eco_id= params['id']
});
this.serviceSubscription= this.http.ReloadForm.subscribe(res=>this.OnFormLoad(res));
}
ngOnDestroy(){
if(this.routesSubscription){
this.routesSubscription.unsubscribe();
}
if(this.serviceSubscription){
this.serviceSubscription.unsubscribe();
}
}
如果您想全部退订,则可以使用.add()将“子级”添加到订阅中,然后可以退订所有。如果您需要更多的动态控制功能,只需为每个变量添加变量(甚至将它们分成几组即可),以便您有更多的控制权。