我在Angular中有结构指令,就像这样
@Directive({ selector: "[access]" })
export class AuthorizationAccessDirective implements OnInit, AfterViewChecked {
constructor(private templateRef: TemplateRef<any>, private eleRef: ElementRef, private viewContainer: ViewContainerRef) {
}
hasView: boolean = false;
@Input("access")
_accessInput: string[];
@Input()
accessFeatures: any;
ngAfterViewChecked() {
this.processAuthorization();
}
ngOnInit() {
this.processAuthorization();
}
}
使用该指令的html看起来像这样
<li routerLinkActive="active" *access="['CAD']" accessFeatures="{'Settings':31}">
...
</li>
我可以毫无问题地获得_accessInput值。但是在 ngOnInit 和 ngAfterViewChecked 两种方法中,额外参数“ accessFeatures ”始终未定义。
我将值更改为字符串以简化而没有成功
<li routerLinkActive="active" *access="['CAD']" accessFeatures="31">
我将@Input定义更改为 @input( “特征”) 和 @input( “accessFeatures”)
我做错了什么? 谢谢你的进步。
答案 0 :(得分:2)
如果你有这些inputs
@Input("access")
_accessInput: string[];
@Input()
accessFeatures: any;
然后你就可以使用它:
<li *access="['CAD']; features: {'Settings':31}">
...
</li>
(您也可以省略;
或替换为,
)
因为它会转换为
<ng-template [access]="['CAD']" [accessFeatures]="{'Settings':31}">
<li>
</li>
</ng-template>
<强> Plunker Example 强>
另见
P.S。如果您怀疑,您可以随时查看源代码 https://github.com/angular/angular/blob/4.2.0-beta.1/packages/common/src/directives/ng_component_outlet.ts#L40-L71