6

如此问题所述,如果您尝试使用指令访问 ngControl.control:

export class DisabledDirective {
  @Input()
  set opDisabled(condition: boolean) {
    const action = condition ? 'disable' : 'enable';
    this.ngControl.control[action]();
  }

  constructor(private ngControl: NgControl) {}
}

第一次渲染时会报错:

core.js:5828 ERROR TypeError: Cannot read property 'disable' of undefined
4

1 回答 1

8

给定链接中的解决方案非常笨拙且不可靠。

在他们解决问题之前,只需在第一次渲染时使用 if-s 保护表达式:

export class DisabledDirective {
  @Input()
  set opDisabled(condition: boolean) {
    const action = condition ? 'disable' : 'enable';
    if(this.ngControl?.control){
       this.ngControl.control[action]();
    }
  }

  constructor(private ngControl: NgControl) {}
}

ps.:请注意新的安全/猫王运算符,您也可以在 TS 代码中的 Angular 9 中使用它:)

于 2020-02-20T09:48:47.413 回答