Html 角度2-变量更改时更新视图

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

我在导航栏(app.component.html)上有一个按钮,我只想在用户登录时显示它。 这是我目前的方法,由于后面解释的明显原因,它不起作用。我想知道如何修改它以使其工作

在我的app.component.html中,我有以下按钮

<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);    
}