angular7 中的指令没有传递值

no pass value to directive in angular7

我在 Angular7 中创建了一个 Directive,但是当我需要将 html 的 string 值传递给指令时。

但是当我在 HTML 中使用它时:

<ng-template [appValidatePermission]='CreateRole'>
   <router-outlet></router-outlet>
</ng-template>

这是我的指令:

    @Directive({
  selector: '[appValidatePermission]'
})
export class ValidatePermissionDirective implements OnInit {

  show: boolean;
  constructor(private templateRef: TemplateRef<any>,
              private viewContainerRef: ViewContainerRef
    ,         private dynamic: DynamicPermissionService) { }

  // tslint:disable-next-line:no-input-rename
  @Input() AccessName: string;

  ngOnInit() {
    this.ValidatePemission();
    if (this.show) {
      this.viewContainerRef.createEmbeddedView(this.templateRef);
    } else {
      this.viewContainerRef.clear();
    }
  }
  ValidatePemission() {
    console.log('AccessName : ', this.AccessName);
    const find = this.dynamic.dynamicModel.find(x =>
      !! x.actionsVM.find(z => z.actionEnglishName === this.AccessName));
    if (find) {
        this.show = true;
      } else {
         this.show = false;
      }
  }
}

它告诉我 AccessName: Undefined

有什么问题???我该如何解决???

你可以这样试试

<ng-template [AccessName]="<value you want to send>" appValidatePermission >
   <router-outlet></router-outlet>
</ng-template>

您没有传递变量。 要使用指令,请像在 HTML

中那样做
  <ng-template appValidatePermission AccessName="CreateRole">
   <router-outlet></router-outlet>
   </ng-template>

请注意,如果您使用 [] 并想输入一个stirng,您应该这样做

  <ng-template appValidatePermission [AccessName]="'CreateRole'">
   <router-outlet></router-outlet>
   </ng-template>