У меня есть в моем проекте 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, уничтожив компонент. Но я не могу понять, почему он вызывает подписку несколько раз, так как компонент будет уничтожен при выходе со страницы и создать новый экземпляр при входе?