Подписка RxJS в службе Angular 9 увеличивала вызовы, покидая и входя на страницу, включая компонент

У меня есть в моем проекте Angular 9 (rxjs v. 6.5.4) такой код:

export class MyServiceService {
   private myBS = new BehaviorSubject<SomeObject>(null);
   public myBS$ = this.myBS.asObservable();
   setMyBS(value: SomeObject): void {
      this.myBS.next(value);
   } 
}

export class Class1 {
   constructor(private myServiceService: MyServiceService) {}
   myServiceServiceSub = myServiceService.subscribe(result => {
       // Every time I leave the component and enter it again, this part will be called +1 time more
   });
}

export class Class2 {
   constructor(private myServiceService: MyServiceService) {}
   someMethod() {
       myServiceService.setMyBS(someValue);
   }
}

Как описано, каждый раз, когда я покидаю страницу, содержащую компонент (класс 1), и снова захожу на нее, часть подписки будет называться +1 раз больше. Так что если я 5 раз выйду и зайду на страницу, код в рамках подписки будет вызван 5 раз.

Я узнал, что я должен отказаться от подписки на Observable, уничтожив компонент. Но я не могу понять, почему он вызывает подписку несколько раз, так как компонент будет уничтожен при выходе со страницы и создать новый экземпляр при входе?


person Jimy Weiss    schedule 17.04.2020    source источник
comment
Взгляните на ответ, stackoverflow.com/questions/57007118/, это поможет вам лучше понять   -  person Goga Koreli    schedule 17.04.2020
comment
Каждый раз, когда вы покидаете страницу, компонент уничтожается, поэтому, если вы вернетесь на страницу, она должна создать новую, выполнить конструктор и снова подписаться. Новая подписка отличается от предыдущей. Итак, взгляните на ссылку, предоставленную @GogaKoreli.   -  person Lievno    schedule 19.04.2020
comment
@Lievno Я понимаю, что компонент уничтожен, и именно в этом мой вопрос: почему новый экземпляр запускается несколько раз? Насколько я понимаю, триггер для старых экземпляров-наблюдателей должен попасть в нирвану, потому что они уничтожены и не имеют ничего общего с новым экземпляром.   -  person Jimy Weiss    schedule 20.04.2020
comment
Они не уничтожаются, компонент уничтожается, но подписка остается. Если вы не отмените подписку на горячую наблюдаемую, она останется в силе.   -  person Lievno    schedule 20.04.2020
comment
@Lievno да, но новый экземпляр компонента не имеет ничего общего с подписками, созданными более старыми экземплярами.   -  person Jimy Weiss    schedule 22.04.2020
comment
Но ваш сервис не уничтожается и сохраняет ссылку на ваш наблюдаемый объект, поэтому все подписки из вашего компонента. Вы читали сообщение, предоставленное @GogaKoreli?   -  person Lievno    schedule 22.04.2020