【发布时间】:2020-11-17 11:53:10
【问题描述】:
如何在组件加载后显示/隐藏 HTML 内容?
我正在尝试在标题工具栏上显示/隐藏一个按钮,该按钮会根据登录状态而变化。
下面的工具栏组件加载到主页中。由于该组件是在主页上加载的,因此它永远不会再次重新加载。当我登录时,我想相应地显示和隐藏那个 ion-buttons 部分。
登录后,我在工具栏组件类中调用了 getAndSetLogin() 函数,控制台日志显示 loggedIn=true,现在应该隐藏登录部分,但不会显示/隐藏。
工具栏组件 HTML
<ion-header>
<ion-toolbar>
// Hide this button if logged in
<ion-buttons *ngIf="!loggedIn" slot="end">
<ion-button (click)="showLoginPopover($event)">
<ion-label class="header-toolbar-text btn-label">Log In</ion-label>
</ion-button>
</ion-buttons>
</ion-toolbar>
</ion-header>
(Toolbar Component.ts) 更新工具栏组件登录状态的函数
public getAndSetLoginState() {
this.userService.checkedLoggedInStatus().subscribe((loggedInState: any) => {
// loggedInState is either true or false, true if logged in and false otherwise
this.loggedIn = loggedInState;
});
}
工具栏组件文件中的上述代码在我登录时触发,现在它只是提供程序中的一个按钮,它设置返回一个可观察的 true。
我尝试添加类似的 ChangeDetectorRef
// Get an observable of the login state
public getAndSetLoginState() {
this.userService.checkedLoggedInStatus().subscribe((loggedInState: any) => {
this.loggedIn = loggedInState;
this.cd.markForCheck();
// cd = ChangeDetectorRef initliased in the constructor
});
}
但这也没有检测到我的更改。
我是否更正了 Angular 只加载 HTML 一次,正因为如此,ngIf 语句只有在您在 onInit 或构造函数中更改它们时才有效。
如何根据登录状态显示/隐藏内容。我听说过使用 RXJS BehaviourSubject,但不确定这会有什么帮助。
【问题讨论】:
标签: html angular typescript ionic-framework ionic5