html - Angular9更新变量以在加载内容后显示/隐藏HTML
问题描述
加载组件后如何显示/隐藏 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,但不确定这会有什么帮助。
解决方案
您可以将loggedInState保存在UserService文件中。
export class UserService{
private logingData;
private loggedIn = false;
constructor(
private http: HttpClient,
) { }
login(){
this.logingData= this.http.post(-call your server-);
return this.logingData;
this.loggedIn = this.logingData.status;
}
}
然后将该loggedIn变量绑定到工具栏。
在 html 中
<ion-buttons *ngIf="!userService.loggedIn" slot="end">
在 ts
import { UserService} from "your location";
constructor(public userService: UserService){}
然后从 Popover 组件调用此方法。
public getAndSetLoginState() {
this.userService.checkedLoggedInStatus().subscribe((loggedInState: any) => {
console.log(loggedInState);
});
}
我希望这会对你有所帮助。谢谢。
推荐阅读
- python - 如何使用正则表达式将子字符串分配给变量?
- php - 在将我的 laravel 6 项目上传到 000webhosting 时,出现如下错误:
- python - 根据列绘制不同颜色的线
- spring - 无法连接到 Command Metric Stream。在 Hystrix 仪表板问题中
- authentication - 当使用 JWT 进行身份验证时,自定义范围(权限/声明)应该进入访问令牌还是 id 令牌?
- python - Can I use Node.js for the back end and Python for the AI calculations?
- java - 将一个列表中的值复制到另一个对象,该对象可以由 maps 键有效地唯一标识
- apache-kafka - How add HDFS connector to Kafka Connect API?
- android-studio - 如何让 Android Studio 3.5.3 停止在搜索结果中返回生成的代码?
- firebase - How to listen to future path in firebase