Мне кажется, я понимаю концепцию Observables
в Rxjs
, но я изо всех сил пытаюсь преобразовать теорию в код.
У меня есть угловой компонент, скажем C
.Я хочу, чтобы он отображал определенные компоненты HTML в зависимости от того, вошел ли пользователь в систему или нет.Для этого я использую код, подобный
<ng-container *ngIf = "userNotloggedIn">
...
У меня есть Angular Service
, который аутентифицирует пользователя.Я хочу, чтобы, как только пользователь прошел аутентификацию, сервис должен emit
значение (скажем, boolean
true
или false
, соответствующее входу и выходу из системы).Я хотел бы использовать Observable
для этого, и мой компонент должен подписаться на это Observable
.
Я изо всех сил пытаюсь преобразовать это в код.В моем сервисе я создал Observable следующим образом, и затем я выдаю значения (true или false), когда пользователь входит или выходит из системы:
export class UserManagementService {
userSignedIn$: Observable<boolean>;
constructor(private http: HttpClient, private bs:WebToBackendInterfaceService) {
this.userSignedIn$ = Rx.Observable.of(false)
}
onUserSignout(){
console.log("In UserManagementService: onUserSignout")
return this.bs.onUserSignout().subscribe((res/*:ServerResponse*/)=>{
console.log("response fromm server",res)
this.userSignedIn$ = Rx.Observable.of(false)
}); //res is of type HttpResponse
}
signinUser(user:UserSigninInfo){
return this.bs.signinUser(user).subscribe((res:HttpResponse<any>)=>{console.log('response from server:',res);
console.log('response headers',res.headers.keys())
this.userSignedIn$ = Rx.Observable.of(true)
} )
}
Затем вкомпонент, я подписываюсь на наблюдаемый следующим образом:
ngOnInit(){
this.userloggedIn = false;
this.userManagementService.userSignedIn$.subscribe(x=>{console.log("got stream value ",x);
this.userloggedIn = x})
...
}
Приведенный выше код не работает, хотя.Я получаю самое первое значение, испускаемое Observable (соответствующее this.userManagementService.userSignedIn$.subscribe(x=>{console.log("got stream value ",x);
), но ничего после этого.
Я подозреваю, что это может быть потому, что я подписываюсь на исходную Observable, но не на новые, созданные вфункции входа и выхода.Как я могу решить мою проблему?