我的解决方案是创建一个指令和它相关的组件,所以我只给它的用户想要访问
模块
如果用户登录并且可以访问该链接,该指令询问服务
如果是,该链接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