У меня проблемы с наблюдаемым в моем сервисе. Следующий код иллюстрирует это:
@Injectable({
providedIn: 'root'
})
export class MyService {
public globalVariable: BehaviorSubject<string> = new BehaviorSubject('');
}
У меня есть компонент функции:
export class ComponentA implements OnInit {
constructor(public myService : MyService ) {
this.myService.globalVariable.next('newValue');
}
ngOnInit() {
this.myService.globalVariable.subscribe(_ => console.log('=> hello'));
}
}
Модуль приложения:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ComponentAModule,
ComponentBModule,
AppRoutingModule
],
providers: [MyService],
bootstrap: [AppComponent]
})
export class AppModule {
}
И, наконец, структура проекта:
app-module.ts
app-routing.module.ts
-components
-- componentA
--- componentA.module.ts
--- componentA-routing.module.ts
--- componentA.component.ts
--- componentA.component.html
-- componentB
--- componentB.module.ts
--- componentB-routing.module.ts
--- componentB.component.ts
--- componentB.component.html
Теперь проблема, с которой я столкнулся, заключается в том, что когда я перехожу к componentA
, вывод будет:
=> hello
=> hello
До сих пор все в норме и ведет себя так, как я ожидал. Запускается первая подписка, а затем изменение globalVariable
конструктором componentA
.
Однако, когда я перехожу к componentB
и возвращаюсь к componentA
, вывод будет:
=> hello
=> hello
=> hello
Он добавляет один каждый раз, когда я возвращаюсь к componentA
. Как будто он создает новый экземпляр MyService
? Или не уничтожает подписку при выходе?
Информация: ленивой загрузки нет.