我正在设置我的第一个角度应用程序,并且试图根据当前用户显示菜单选项
这是我的菜单代码的一部分:
<a *ngIf="areYouHeadMaster() == 'true'" class="navbar-item" routerLink="/announcement">
announcement
</a>
areYouHeadMaster方法:
areYouHeadMaster(){
console.log(this.transferData.getData());
return this.transferData.getData();
}
TransferData是仅具有一个变量并设置为get方法的服务。在控制台日志中,我得到的值为True,但是链接未添加到菜单中。
答案 0 :(得分:2)
true
视为字符串(用引号引起来)。这是一个逻辑值,所以== true
会做到*ngIf="areYouHeadMaster()"
,并跳过显式检查是否为真this.transferData.getData();
是异步调用,请在ngOnInit
中运行它,并将结果分配给作用域变量。在模板中使用变量,而不要使用函数调用*ngIf="isHeadmaster"
。答案 1 :(得分:2)
如果getData()
返回布尔值,则您的ngIf表达式错误,因为true == 'true'
解析为false
。尝试使用true
,不要使用单引号:
<a *ngIf="areYouHeadMaster() == true" class="navbar-item" routerLink="/announcement">
announcement
</a>
或更短,省略比较:
<a *ngIf="areYouHeadMaster()" class="navbar-item" routerLink="/announcement">
announcement
</a>
答案 2 :(得分:0)
尝试将此方法更改为如下所示:
areYouHeadMaster(){
console.log(this.transferData.getData());
return this.transferData.getData().toLowerCase();
}
角度字符串比较区分大小写。如前所述,“在控制台日志中,我得到的值为True”,这与“ true”不同。
答案 3 :(得分:0)
与其将布尔值与字符串进行比较,不如尝试
<a *ngIf="areYouHeadMaster() == true" class="navbar-item" routerLink="/announcement">
announcement
</a>