我的解決方案是創建一個指令和它相關的組件,所以我只給它的用戶想要訪問
模塊
如果用戶登錄並且可以訪問該鏈接,該指令詢問服務
如果是,該鏈接remplaced與組件
這裏是如何插入組件dynamicaly(不包含授權部分)
import { Directive, Input, ComponentFactoryResolver,ViewContainerRef } from '@angular/core';
import { MenuItemComponent } from './menuItem.component';
@Directive({ selector: '[menuItem]' })
export class MenuItemDirective {
constructor(
private componentFactoryResolver: ComponentFactoryResolver,
private viewContainer: ViewContainerRef) {}
@Input() set menuItem(_link: string) {
if(some sort of condition depending on a auth service)
{
const factory = this.componentFactoryResolver.resolveComponentFactory(MenuItemComponent);
const menuItemComponentRef = this.viewContainer.createComponent(factory);
menuItemComponentRef.changeDetectorRef.detectChanges();
}
else
this.viewContainer.clear();
}
}
可能是矯枉過正個例,但最終我用
<a *menuItem="dashBoard"></a>
代替
<a class="menuItemA menuRouterLinkA" routerLink="/dashBoard" routerLinkActive="menuCurrentLinkA" >{{ "DashBoard" }}</a>
,它涉及無線th功能/頁面/模塊..訪問授權:-)
yay
通過**標籤屬性**您指的是什麼? – Aravind