Субъект, возвращающий неопределенное значение в конструкторе
Я использую субъект для связи, если пользователь аутентифицирован или нет. Проблема в том, что когда я подписываюсь на тему в компоненте, когда я перезагружаю, тема возвращается неопределенной.
Вот моя реализация, этот метод проверяет, хранятся ли данные пользователя в локальном хранилище. Если они хранятся в локальном хранилище, то для объекта должно быть установлено значение true.
Пользователь.обслуживание.ts
public auth_status:Subject<boolean> = new Subject<boolean>();
getCurrentUser(): User {
let storage = localStorage.getItem('current_user');
if (storage) {
return Json.parse(storage);
} else {
return null
}
};
getUserAuth() {
if (this.getCurrentUser() != null) {
this.auth_status.next(true);
console.log(this.auth_status);
} else {
this.auth_status.next(false);
console.log(this.auth_status);
}
return this.auth_status;
}
Навбар.деталь.ts
constructor(private _userService: UserService) {
this._userService.getUserAuth().subscribe(data => this.auth_status = data);
}
Это.auth_status переключает *ngIf в моей навигационной панели, что показывает кнопку входа или выхода
Я пробовал вызывать метод перед подпиской на него, но это, кажется, не работает.
Спасибо!
1 ответ:
События испускаются до того, как субъект возвращается, поэтому, когда
subscribe()
вызывается в конструкторе, события уже исчезли.Вы можете использовать
BehaviorSubject
, чтобы предотвратить это, какpublic auth_status:Subject<boolean> = new BehaviorSubject<boolean>(null);
A
BehaviorSubject
передает последнее событие новым подписчикам сразу после того, как один подписался.