【发布时间】:2019-02-17 21:04:41
【问题描述】:
我有这个 Angular 6 应用程序,我使用 Firebase 的 Google 登录实现了登录。我添加了一个按钮,当您注销时显示 Login,或者如果您已登录,按钮显示 Logout,它还显示您当前的电子邮件地址登录。
这是一个代码示例:
<p *ngIf="isLoggedIn()" class="text-white" style="margin-bottom: 0; padding-left: 10px">{{ afAuth.auth.currentUser.email }}</p>
<button *ngIf="!isLoggedIn()" class="btn btn-danger" type="button" (click)="login()">Log In</button>
<button *ngIf="isLoggedIn()" class="btn btn-danger" type="button" (click)="logout()">Log Out</button>
constructor(private afAuth: AngularFireAuth) {
}
isLoggedIn() {
return this.afAuth.auth.currentUser;
}
login() {
try {
this.afAuth.auth.signInWithPopup(new auth.GoogleAuthProvider());
} catch (e) {
console.log(e.message);
}
}
logout () {
try {
this.afAuth.auth.signOut().then(() => {
this.hideAllViews();
});
} catch (e) {
console.log(e.message);
}
}
一切似乎都正常,除了如果您当前已登录并刷新页面,它似乎没有显示正确的状态,这意味着它显示 登录 按钮而不是显示您的电子邮件地址和 注销 按钮,因为您已经登录了。只要您点击标签或任何其他按钮或链接页面更新回显示电子邮件和 注销 strong> 按钮。
在我看来,HTML 页面在检查 isLoggedIn() 方法之前就已加载。
我通过在构造函数中添加以下内容找到了解决方法:
setTimeout(function () {
},
请让我知道解决此问题的“Angular 方式”/最佳方式是什么。
【问题讨论】:
-
您可以将
isLoggedIn()移动到AfterViewChecked方法中。它应该会有所帮助。 -
@DmitryS。我刚刚测试过,不幸的是它没有用。还有其他想法吗?
-
能否提供
AngularFireAuth服务/组件的代码? -
@DmitryS。我相信我已经有了。我基本上在构造函数中初始化它,然后在 isLoggedIn()、login() 和 logout() 中使用它
-
@DmitryS。另外,您的意思是在 ngAfterViewChecked() 中调用 isLoggedIn() 吗?
标签: javascript html angular