【发布时间】:2021-08-11 14:27:59
【问题描述】:
我对 *ngIf 在 Angular 中的工作方式有疑问。我有一个导航栏组件,它进行检查并应根据真/假响应呈现不同的列表,它在这方面工作正常,但在路由到不同页面后它停止工作,直到我再次刷新页面。
HTML:
<div *ngIf="isUserValid(); then logged_in else logged_out"></div>
<ng-template #logged_out>
<ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end" aria-labelledby="navbarDropdown">
<li>
<p class="dropdown-item">You are not logged in!</p>
</li>
<li><hr class="dropdown-divider"></li>
<li>
<a class="dropdown-item" routerLink="/login"> Login </a>
</li>
<li>
<a class="dropdown-item" routerLink="/signup"> Sign-Up </a>
</li>
</ul>
</ng-template>
<!-- If user is logged in -->
<ng-template #logged_in>
<ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end" aria-labelledby="navbarDropdown">
<li>
<p class="dropdown-item">Hi, [user's name]</p>
</li>
<li><hr class="dropdown-divider"></li>
<li>
<a class="dropdown-item" (click)="quit()" routerLink="/login"> Sign-Out </a>
</li>
</ul>
</ng-template>
TS(这是点击退出时发生的情况):
quit(): void{
this.is_valid_user = false;
localStorage.clear();
this.router.navigate(['login']).then(r => console.log('user quit'));
}
isUserValid(): boolean{
return this.is_valid_user;
}
当您单击注销按钮时,它应该重定向并显示已注销的块,但它什么也不显示,并且仅在页面刷新后才显示。任何帮助表示赞赏。
【问题讨论】:
标签: angular angular-router angular-ng-if