2

我正在尝试将我的项目更新为 Angular9 / Ivy 并面临以下问题。我有一个自定义的“disabledControl”指令,如以下博客(https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110)中所述。我以反应形式使用它,并带有一个表达式来启用/禁用基于复选框组合的特定控件。由于 Angular9 / Ivy 的更新,当首次调用 @Input 方法 set disableControl 时不再设置 ngControl.control。任何提示我们如何修复建议的博客解决方案?

4

1 回答 1

3

有一个未解决的问题,您可以找到Angular 问题

Alexey Zuev提供了一个不错的解决方案

解决方案是将 ngOnChanges 生命周期钩子与您的指令一起使用。

这是一个如何使用 ngOnChanges 生命周期挂钩来解决问题的示例。

import { NgControl } from '@angular/forms';
import { Directive, Input, OnChanges } from '@angular/core';

@Directive({
  selector: '[disableControl]',
})
export class DisableControlDirective implements OnChanges {
  @Input('disableControl') disableControl;
  constructor(private ngControl: NgControl) {}

  ngOnChanges(changes) {
    if (changes['disableControl']) {
      const action = this.disableControl ? 'disable' : 'enable';

      this.ngControl.control[action]();
    }
  }
}

Alexey Zuev 的完整示例

于 2020-04-06T07:25:44.583 回答