额外参数在angular指令中始终为null

时间:2017-05-16 17:06:32

标签: angular angular2-directives

我在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”)

我做错了什么? 谢谢你的进步。

1 个答案:

答案 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