Я использую классы и компоненты. При уничтожении компонента вызов классов для уничтожения метода и выполнение отказа от подписки рядом с уничтожением связанных классов наблюдаемого.
Я использую встроенный эмиттер событий в качестве события и отправляю сообщение наблюдаемому далее. Итак, где наблюдаемый подписывается там, я обновляю некоторые данные и отправляю рядом с eventEmitter все, что получено в наблюдаемой подписке в сообщении.
например: класс 3 отправляет наблюдаемый (emitmessage), либо подписка на class2 и class1, либо на оба наблюдаемый (отправленный из класса 3) и отправка рядом с отправлением сообщения (эмиттер события сообщения).
вот пример кода
class1:
-------
export class1 {
unsubscribe=new Subject();
mydata1;
constructor(private myService:MyService){
this.myService.getFormComponentInstance$.pipe(takeUntil(this.unsubscribe)).subscribe((modelData:any)=>{
(<EventEmitter<any>>modelData.Event).next(this.mydata1);
})
}
destroyUtil(){
this.unsubscribe.next();
this.unsubscribe.complete();
}
}
class2:
--------
export class2 {
mydata2
unsubscribe=new Subject();
constructor(private myService:MyService){
this.myService.getFormComponentInstance$.pipe(takeUntil(this.unsubscribe)).subscribe((modelData:any)=>{
modelData.PayLoad=this.mydata2;
(<EventEmitter<any>>modelData.Event).next(modelData);
})
}
destroyUtil(){
this.unsubscribe.next();
this.unsubscribe.complete();
}
}
class3:
export class3{
constructor(private myService:MyService){}
onSomeEvent(){
let data=null;
this.someMethod(data);
}
someMethod(data){
let modelEvent={
PayLoad: data,
Event: new EventEmitter()
}
setTimeout(() => {
this.myService.getFormComponentInstance$.next(modelEvent)
});
return modelEvent.Event;
}
}
component1:
-----------
utilInstance;
constructor(){}
ngOnInit(){
this.utilInstance = new class1();
...
}
ngOnDestroy(){
this.utilInstance.destroyUtil();
this.utilInstance=null;
}
MyService
------------
someMethod(data){
let modelEvent={
PayLoad: data,
Event: new EventEmitter()
}
setTimeout(() => {
this.myService.getFormComponentInstance$.next(modelEvent)
});
return modelEvent.Event;
}
}
othercompnents:
-----------------
myservice.someMethod(data).subscribe((res)=>....);
Итак, я сталкиваюсь с такими проблемами, как наблюдаемые getFormComponentInstance
не уничтожаются. При повторении он обрабатывается, подписка увеличивается.
Пожалуйста, подскажите, где я ошибаюсь. Любые предложения приветствуются.
Спасибо.