Angular 9 Ivy、NgControl 未在指令中初始化
Angular 9 Ivy, NgControl not initialized in Directive
我正在尝试将我的项目更新到 Angular9/Ivy 并遇到以下问题。
我有一个自定义 "disabledControl" 指令,如以下博客 (https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110) 中所述。我以带有表达式的反应形式使用它,以根据复选框的组合启用/禁用特定控件。
由于对 Angular9 / Ivy 的更新,当首次调用 @Input 方法 set disableControl 时,不再设置 ngControl.control。
有任何提示我们可以如何解决建议的博客解决方案吗?
您可以找到一个未解决的问题 Angular Issues
有一个很好的解决方案 tweet by 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]();
}
}
}
我正在尝试将我的项目更新到 Angular9/Ivy 并遇到以下问题。 我有一个自定义 "disabledControl" 指令,如以下博客 (https://netbasal.com/disabling-form-controls-when-working-with-reactive-forms-in-angular-549dd7b42110) 中所述。我以带有表达式的反应形式使用它,以根据复选框的组合启用/禁用特定控件。 由于对 Angular9 / Ivy 的更新,当首次调用 @Input 方法 set disableControl 时,不再设置 ngControl.control。 有任何提示我们可以如何解决建议的博客解决方案吗?
您可以找到一个未解决的问题 Angular Issues
有一个很好的解决方案 tweet by 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]();
}
}
}