gpt4 book ai didi

angular - 主题在构造函数中返回未定义

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:52 25 4
gpt4 key购买 nike

我正在使用 Subject 来交流用户是否通过身份验证。问题是,当我在重新加载时订阅组件中的主题时,主题返回未定义。

这是我的实现,此方法检查用户数据是否存储在本地存储中。如果它们存储在本地存储中,则 Subject 应设置为 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);
}

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

我也尝试过在订阅之前调用该方法,但这似乎不起作用。

谢谢!

最佳答案

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

你可以使用 BehaviorSubject 来防止这种情况

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

BehaviorSubject 在新订阅者订阅后立即向新订阅者发送最后一个事件。

关于angular - 主题在构造函数中返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41095801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com