Субъект, возвращающий неопределенное значение в конструкторе


Я использую субъект для связи, если пользователь аутентифицирован или нет. Проблема в том, что когда я подписываюсь на тему в компоненте, когда я перезагружаю, тема возвращается неопределенной.

Вот моя реализация, этот метод проверяет, хранятся ли данные пользователя в локальном хранилище. Если они хранятся в локальном хранилище, то для объекта должно быть установлено значение 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 2

1 ответ:

События испускаются до того, как субъект возвращается, поэтому, когда subscribe() вызывается в конструкторе, события уже исчезли.

Вы можете использовать BehaviorSubject, чтобы предотвратить это, как

public auth_status:Subject<boolean> = new BehaviorSubject<boolean>(null);

A BehaviorSubject передает последнее событие новым подписчикам сразу после того, как один подписался.