我正在开发一个 Angular 2 (rc-4) 指令,它将检查是否可以在当前用户权限下查看组件并相应地显示/隐藏组件。
我在组件初始化时创建了组件标识符。例如,在profile.component.ts中,我正在为 ProfileComponent ( elementId:string;
)生成 id
import {Component, Input} from "@angular/core";
@Component({
moduleId: module.id,
selector: 'app-profile',
templateUrl: 'profile.component.html',
styleUrls: ['profile.component.css'],
directives: []
})
export class ProfileComponent {
@Input('parent-id') parentId:string = "app";
elementId:string;
constructor(){}
ngOnInit() {
this.elementId = this.parentId + ".profile";
}
}
我按照Angular 2 指南创建了一个结构指令。
import {Directive, Input, TemplateRef, ViewContainerRef} from "@angular/core";
@Directive({
selector: '[restrict]'
})
export class RestrictDirective {
authMatrix:any = {
"guest": {
"app.dashboard.calendar": false,
"app.dashboard.profile": false
},
"user": {
"app.dashboard.calendar": false,
"app.dashboard.profile": true
},
"admin": {
"app.dashboard.calendar": true,
"app.dashboard.profile": true
}
};
constructor(
private templateRef: TemplateRef<any>,
private viewContainerRef: ViewContainerRef
) {}
@Input() set restrict(elementId: string) {
let user:string = "admin"; // TODO get current logged in user
let grant:boolean = this.authMatrix[user][elementId]; // TODO user authority service
if (!grant) {
this.viewContainerRef.createEmbeddedView(this.templateRef);
} else {
this.viewContainerRef.clear();
}
}
}
因此,为了阻止或允许一个组件,我需要将该组件的 id 传递给指令。目前,我已将组件 ID(“app.dashboard.profile”)硬编码到指令输入中,如下所示,
<app-profile *restrict="'app.dashboard.profile'" [parent-id]="elementId" ></app-profile>
此设置有效。但我想从关联组件的变量中获取组件 id,而不是在 html 标记中对其进行硬编码。有没有办法可以从我的指令 (RestrictDirective) 访问我的组件 (ProfileComponent) 中的变量?