У меня проблемы с наблюдаемым в моем сервисе.Следующий код иллюстрирует это:
@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
?Или не уничтожить подписку при выходе?
Информация: Там нет ленивой загрузки.