Предполагая, что loginService.checkLoginStatus
- это Observable
, который будет выдвигать новые значения boolean
в true
или false
, как только пользователь выполнит вход или выход из системы, вы можете просто использовать это.
На самом деле, вы уже используете его.Таким образом, всякий раз, когда происходит изменение состояния входа пользователя в систему, свойство isLoggedIn
в вашем Компоненте будет обновляться.Так что вы должны иметь возможность напрямую использовать его в своем шаблоне.
Кроме того, поскольку это так, вам не нужен код, который вы используете в ngOnInit
.На самом деле, вы можете переместить свой код constructor
в ngOnInit
и немного изменить его код.Примерно так:
export class NavMenuComponent implements OnInit {
isExpanded = false;
isNavbarCollapsed = true;
isLoggedIn: boolean;
subscription: Subscription;
constructor(
private jwtHelper: JwtHelper,
private loginService: LoginService
) {}
ngOnInit() {
this.subscription = loginService.checkLoginStatus
.subscribe(isLoggedIn => this.isLoggedIn = isLoggedIn);
}
...
}
ОБНОВЛЕНИЕ:
Я думаю, вам следует создать private
BehaviorSubject
в вашем LoginService
, который вы затем собираетесь выставить asObservable
публично,Теперь, когда пользователь входит в систему, просто наберите .next(true)
для этого личного BehaviorSubject
, а когда пользователь выйдет из системы, позвоните .next(true)
.
import { BehaviorSubject, Observable } from 'rxjs';
export class LoginService {
private isLoggedIn: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
isLoggedIn$: Observable<boolean> = this.isLoggedIn.asObservable();
constructor(private jwtHelper: JwtHelper) {}
...
// When Login
this.isLoggedIn.next(true)
...
// When Logout
this.isLoggedIn.next(false)
/* checkLoginStatus(): boolean {
var token = localStorage.getItem("jwt");
(token && !this.jwtHelper.isTokenExpired(token)) ? this.isLoggedIn.next(true): this.isLoggedIn.next(false);
} */
}
Затем вы можете subscribe
на public
Observable
обычным способом в вашем Компоненте.
Примерно так:
export class NavMenuComponent implements OnInit {
isExpanded = false;
isNavbarCollapsed = true;
isLoggedIn: boolean;
subscription: Subscription;
constructor(
private jwtHelper: JwtHelper,
private loginService: LoginService
) {}
ngOnInit() {
this.subscription = this.loginService.isLoggedIn$
.subscribe(isLoggedIn => this.isLoggedIn = isLoggedIn);
}
...
}