【问题标题】:Extra parameter always null in angular directive角度指令中的额外参数始终为空
【发布时间】:2017-05-16 17:06:31
【问题描述】:

我在 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 的值,但是在ngOnInitngAfterViewChecked 两种方法中,额外的参数accessFeatures 始终是undefined

我将值更改为字符串以简化,但也没有成功:

<li routerLinkActive="active" *access="['CAD']" accessFeatures="31"> 

我将@Input 定义更改为@Input("features")@Input("accessFeatures")

我做错了什么?

【问题讨论】:

  • 我对它现在的工作方式感到惊讶,*access="['CAD']" 是我认为的错误语法,它应该是 [access]="['CAD']"this.processAuthorization(); 是什么?
  • [access]="['CAD']" [accessFeatures]="'any'"[access]="['CAD']" accessFeatures="any"minimal reproducible example 中对我来说很好。

标签: angular angular2-directives


【解决方案1】:

如果你有这些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

另见

附:如果您有疑问,可以随时查看source code

【讨论】:

  • 我认为features 应该是accessFeatures 或者你的意思是@Input("features")
  • @echonax 不,应该像我写的那样
  • 作为一个魅力!谢谢大家的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
相关资源
最近更新 更多