Является ли компонент LoginComponent загруженным модулем с отложенной загрузкой?
Если это так, вам нужно добавить свойство autIn: 'root' в AuthService:
@Injectable({
providedIn : 'root'
})
Убедитесь, что удалили егоиз свойств провайдера Модуля.
Если ваш LoginComponent загружен не с большой задержкой, убедитесь, что вы импортируете AuthService только один раз в AppModule. В противном случае вы можете получить несколько экземпляров AuthService.
Если вы хотите, чтобы AuthService был частью модуля, вы можете использовать шаблон forRoot, чтобы гарантировать, что службы импортируются только один раз:
@NgModule({
// declarations, imports and exports only
})
export class SharedModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharedModule,
providers: [// your services]
}
}
@NgModule({
imports: [SharedModule.forRoot()]
})
export class AppModule {}
Если на Angular 8 вы также можете сделать:
@Injectable({
providedIn: SharedModule
})
export class AuthService
Вы хотите, чтобы один и тот же экземпляр AuthService был доступен как для AppModule, так и для модуля, где находится ваш LoginComponent.
Наконец, если это не проблема, у вас может быть проблема, когда NavBarComponent подписывается на changeState $ observable после его выдачи. В этом случае вам нужно изменить changeState на BehaviorSubject, поэтому, когда NavBarComponent подписывается, он получает последнее переданное значение.