主题在构造函数中返回undefined

Mat*_*mas 2 observable typescript angular2-services angular

如果用户是否经过身份验证,我正在使用Subject来进行通信.问题是,当我在重新加载时订阅组件中的主题时,主题返回undefined.

这是我的实现,此方法检查用户数据是否存储在本地存储中.如果它们存储在本地存储中,则Subject应设置为true.

user.service.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;
}
Run Code Online (Sandbox Code Playgroud)

navbar.component.ts

  constructor(private _userService: UserService) {
    this._userService.getUserAuth().subscribe(data => this.auth_status = data);
  }
Run Code Online (Sandbox Code Playgroud)

this.auth_status在我的导航栏中切换*ngIf,显示登录或退出按钮

我已经尝试在订阅它之前调用该方法,但这似乎不起作用.

谢谢!

Gün*_*uer 6

事件在返回主题之前发出,因此subscribe()在构造函数中调用时,事件已经消失.

你可以BehaviorSubject用来防止这样

public auth_status:Subject<boolean> = new BehaviorSubject<boolean>(null);
Run Code Online (Sandbox Code Playgroud)

A BehaviorSubject在订阅后立即向新订户发出最后一个事件.

  • BehaviourSubject 需要初始值,因此您需要更新答案 (2认同)