отправить сообщение с EventEmitter наблюдаемому и отправить сообщение EventEmitter next из наблюдаемой подписки, не уничтожая - PullRequest
0 голосов
/ 16 июня 2020

Я использую классы и компоненты. При уничтожении компонента вызов классов для уничтожения метода и выполнение отказа от подписки рядом с уничтожением связанных классов наблюдаемого.

Я использую встроенный эмиттер событий в качестве события и отправляю сообщение наблюдаемому далее. Итак, где наблюдаемый подписывается там, я обновляю некоторые данные и отправляю рядом с 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 не уничтожаются. При повторении он обрабатывается, подписка увеличивается.

Пожалуйста, подскажите, где я ошибаюсь. Любые предложения приветствуются.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...