Невозможно прочитать свойство disable of undefined: this.ngControl.control не определено в Ivy

Как указано в этой проблеме, если вы попытаетесь получить доступ к 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

person ForestG    schedule 20.02.2020    source источник


Ответы (1)


Решение по данной ссылке довольно хакерское и ненадежное.

Пока они не исправят проблему, просто защитите выражение с помощью 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: обратите внимание на новый оператор safe / elvis, который вы также можете использовать в Angular 9 в коде TS :)

person ForestG    schedule 20.02.2020
comment
Эта проблема уже поднималась в проекте angular на github? - person krypru; 12.04.2020