使用 angular 4 根据查询参数显示菜单项
Show menu items based on query params using angular 4
我正在研究基于角色的菜单,以根据查询字符串显示菜单项。就像 url 的形式是 http://www.something.com/something?type=admin 那么我必须只显示管理员的菜单项。但我的逻辑是隐藏所有菜单项。为此,我已经实现了 header.component.ts
中的逻辑
ngOnInit() {
this.route.queryParams
.filter(params => params.type)
.subscribe(params => {
console.log(params); //{type: "admin"}
this.type = params.type;
console.log(this.type);
if(this.type == "admin"){
console.log("ADMIN PAGE");
//this.router.navigate(['dashboard'], { queryParams: { type: this.type } });
//this.router.navigate(['dashboard']);
}else if(this.type == "national"){
console.log("NATIONAL PAGE");
}else if(this.type == "warrington"){
console.log("WARRINGTON PAGE");
}else if(this.type == "subcontractorAdmin"){
console.log("SUB CONTRACOTR ADMIN PAGE");
}else if(this.type == "subcontractorManager"){
console.log("SUB CONTRACTOR MANAGER PAGE");
}else{
console.log("OTHERS PAGE");
}
});
}
当我使用逻辑时,它按预期工作正常。但是当我尝试显示和隐藏基于 *ngIf="type=admin" 的菜单项时,会发生什么情况,然后所有菜单项都被隐藏了。请参阅下面我的模板代码。
header.component.html
<ul class="nav navbar-nav">
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/dashboard','_self')">Dashboard</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/supplier-list','_self')">Suppliers</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/compliance-supplier-list','_self')">Compliance</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/admin-invoice-list','_self')">Invoicing</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/internal-user-list','_self')">User Management</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/node/add/upload_weight_csv','_self')">Weight Ticket</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a routerLink="/searchsupplier">Search</a>
</li>
</ul>
谁能帮我解释为什么所有的菜单项都被隐藏了。
我认为你应该换行
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
到
<li routerLinkActive="active" *ngIf="type == 'admin'">
这与名为 'type' 的变量而不是硬编码字符串 'type'
进行比较,并且还删除了 *ngIf
末尾不必要的分号,因为那里不需要分号。
我正在研究基于角色的菜单,以根据查询字符串显示菜单项。就像 url 的形式是 http://www.something.com/something?type=admin 那么我必须只显示管理员的菜单项。但我的逻辑是隐藏所有菜单项。为此,我已经实现了 header.component.ts
中的逻辑ngOnInit() {
this.route.queryParams
.filter(params => params.type)
.subscribe(params => {
console.log(params); //{type: "admin"}
this.type = params.type;
console.log(this.type);
if(this.type == "admin"){
console.log("ADMIN PAGE");
//this.router.navigate(['dashboard'], { queryParams: { type: this.type } });
//this.router.navigate(['dashboard']);
}else if(this.type == "national"){
console.log("NATIONAL PAGE");
}else if(this.type == "warrington"){
console.log("WARRINGTON PAGE");
}else if(this.type == "subcontractorAdmin"){
console.log("SUB CONTRACOTR ADMIN PAGE");
}else if(this.type == "subcontractorManager"){
console.log("SUB CONTRACTOR MANAGER PAGE");
}else{
console.log("OTHERS PAGE");
}
});
}
当我使用逻辑时,它按预期工作正常。但是当我尝试显示和隐藏基于 *ngIf="type=admin" 的菜单项时,会发生什么情况,然后所有菜单项都被隐藏了。请参阅下面我的模板代码。
header.component.html
<ul class="nav navbar-nav">
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/dashboard','_self')">Dashboard</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/supplier-list','_self')">Suppliers</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/compliance-supplier-list','_self')">Compliance</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/admin-invoice-list','_self')">Invoicing</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/internal-user-list','_self')">User Management</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a href="javascript:void(0);" (click)="navigateExternal('http://www.something.com/node/add/upload_weight_csv','_self')">Weight Ticket</a>
</li>
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
<a routerLink="/searchsupplier">Search</a>
</li>
</ul>
谁能帮我解释为什么所有的菜单项都被隐藏了。
我认为你应该换行
<li routerLinkActive="active" *ngIf="'type' == 'admin';">
到
<li routerLinkActive="active" *ngIf="type == 'admin'">
这与名为 'type' 的变量而不是硬编码字符串 'type'
进行比较,并且还删除了 *ngIf
末尾不必要的分号,因为那里不需要分号。