Html 角度2-变量更改时更新视图
我在导航栏(app.component.html)上有一个按钮,我只想在用户登录时显示它。 这是我目前的方法,由于后面解释的明显原因,它不起作用。我想知道如何修改它以使其工作 在我的app.component.html中,我有以下按钮Html 角度2-变量更改时更新视图,html,angular,typescript,Html,Angular,Typescript,我在导航栏(app.component.html)上有一个按钮,我只想在用户登录时显示它。 这是我目前的方法,由于后面解释的明显原因,它不起作用。我想知道如何修改它以使其工作 在我的app.component.html中,我有以下按钮 <button *ngIf="isCurrentUserExist">MyButton</button> 仅供参考,在my UserService.ts内 export class UserService { private c
<button *ngIf="isCurrentUserExist">MyButton</button>
仅供参考,在my UserService.ts内
export class UserService {
private currentUser: User
constructor(private http: Http,private angularFire: AngularFire) { }
getCurrentUser(): User {
return this.currentUser
}
setCurrentUser(user: User) {
this.currentUser = user;
}
isCurrentUserExist(): boolean {
if (this.currentUser) {
return true
}
return false
}
}
有关我的应用程序的更多信息。。。
当用户不存在时启动时,我有一个登录屏幕(登录组件)。
当用户登录时,它会转到firebase并获取用户信息(异步),并通过
setCurrentUser(user: User)
所以在这一点上,我想更新导航栏中的按钮(存在于app.component.html中)并显示按钮
要实现这一点,我可以做些什么?在
app.component.ts
中,函数会为您分配一次值。所以它永远不会改变。要解决此问题并实时更新,请使用布尔变量的赋值函数实例this.isCurrentUserExist=this.userService.isCurrentUserExist代码>。在视图中,将change*ngIf
表达式更改为函数isCurrentUserExist()
让我们尝试以下操作:
使用行为主体
UserService.ts
import { Subject, BehaviorSubject} from 'rxjs';
export class UserService {
private currentUser: User;
public loggedIn: Subject = new BehaviorSubject<boolean>(false);
constructor(private http: Http,private angularFire: AngularFire) { }
getCurrentUser(): User {
return this.currentUser
}
setCurrentUser(user: User) { // this method must call when async process - grab firebase info - finished
this.currentUser = user;
this.loggedIn.next(true);
}
isCurrentUserExist(): boolean {
if (this.currentUser) {
return true
}
return false
}
}
ngOnInit() {
this.userService.loggedIn.subscribe(response => this.isCurrentUserExist = response);
}
嗨,蒂普。谢谢你。它确实工作得很好。我以前是按照事件发射器的思路思考的。然而,我不喜欢使用它,除非我感到绝望,因为它感觉就像信号在空中飞过,等待有人抓住它(有点像推送通知)。这个行为主体也感觉像某种事件发射器?你知道有没有其他方法(出于学习目的)可以创建自定义事件发射器系统(可能基于可观察),然后在某个地方,你可以订阅类似“user.login”之类的事件(Ionic 2有自己的事件系统)。无论何时触发事件,您都将得到值—有效负载—来执行您喜欢的任何操作。
ngOnInit() {
this.userService.loggedIn.subscribe(response => this.isCurrentUserExist = response);
}