Angular 角度2-在多个条件下使用*ngIf

Angular 角度2-在多个条件下使用*ngIf,angular,angular-ng-if,Angular,Angular Ng If,我无法在导航栏上选择性地显示链接。 根据登录者(用户或管理员),我想更改导航栏上显示的链接 下面是一个用户/管理员注销的实例的代码 在navbar.component.html中- authService.adminLoggedIn()和authService.userLoggedIn()returntokenNotExpired 以下是navbar.component.ts- onUserLogoutClick(){ this.authService.userLogout(); th

我无法在导航栏上选择性地显示链接。 根据登录者(用户或管理员),我想更改导航栏上显示的链接

下面是一个用户/管理员注销的实例的代码

在navbar.component.html中-





authService.adminLoggedIn()
authService.userLoggedIn()
return
tokenNotExpired

以下是navbar.component.ts-

onUserLogoutClick(){
this.authService.userLogout();
this.flashMessage.show('您现在已注销',{cssClass:'警报成功',超时:3000});
this.router.navigate(['/login']);
返回false;
}
onAdminLogoutClick(){
this.authService.adminLogout();
this.flashMessage.show('管理员现在已注销',{cssClass:'警报成功',超时:3000});
this.router.navigate(['/admin']);
返回false;
}
authService.adminLogout()
authService.userLogout()
只是清除存储在本地存储中的令牌


如果我犯的错误是愚蠢的,我提前道歉。我不熟悉Angular。

您可以将这些多行条件和复杂条件移动到组件方法中,如下所示

showLogout(){
    if(this.authService.userLoggedIn()== true && this.authService.adminLoggedIn() == false)
        return true;
    else
        return false;
}
此外,由于angular4具有
*ngIf和else
,因此您可以将其用作

 <div *ngIf="showLogout();then userLogout else adminlogout"></div>

<ng-template #userLogout><a (click)="onUserLogoutClick()" href="#">Logout</a></li></ng-template>
<ng-template #adminlogout><a (click)="onAdminLogoutClick()" href="#">Logout</a></li></ng-template>



表达式中的authService.userLoggedIn()或authService.adminLoggedIn()不会通知模板谁登录,因为函数只调用一次

试着让他们在你的服务中更出色:

  get userLoggedIn(): boolean {
    return this.who.user; // your logic
  }
然后在模板中:

<li *ngIf="authService.userLoggedIn && !authService.adminLoggedIn"...

我认为应该在组件中创建一个布尔属性并使用它。 代替在模板中编写函数或复杂表达式。 模板中的函数会降低性能。
复杂的表达式使其不可读和不可维护。

修改您的帖子,使其更具意义。

您如何确定管理员登录还是用户登录INCA请解释authService.adminLoggedIn()和authService.userLoggedIn()是否返回标记NotExpired,但您正在测试布尔值为true?我还想问一下,您是否更愿意将逻辑作为JS代码的一部分而不是模板中的一部分?它似乎对模板没有影响。我在登录页的导航栏上有不同的管理员和用户登录组件。@BenDadsetan,我在检查身份验证以隐藏/显示元素和处理路由一节中提到了解angular2 jwt。他们还检查*ngIf中的条件,我甚至没有测试它的布尔值,但它仍然不起作用。链接-为什么不简化
showLogout
方法<代码>返回此.authService.userLoggedIn()&&!这个.authService.adminLoggedIn()
@Aravind,您的解决方案可以工作,但是当没有人登录时,导航栏仍然显示(OnAdminLogootClick)的注销链接。我为admin生成的令牌ID为“admin\u-token”,而为用户生成的令牌ID为“user\u-token”。因此,当我调用authService.adminLoggedIn()时,它返回tokenNotExpired('admin_token'),而对于authService.userLoggedIn()则返回tokenNotExpired('user_token')。这是我确定用户或管理员是否已登录的方式。您需要检查令牌是否在您的方法中可用。因此,一切正常还是需要更多帮助?它正在工作。我做了一些编辑。在检查您建议的方法(showLogout())之前,我添加了另一个方法(clientLoggedIn())来检查是否有人(用户或管理员)登录。HTML代码-