【问题标题】:Angular 9 Ivy, NgControl not initialized in DirectiveAngular 9 Ivy,NgControl 未在指令中初始化
【发布时间】:2020-07-15 07:01:12
【问题描述】:

我正在尝试将我的项目更新到 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-reactive-forms angular-directive angular9 angular-ivy


    【解决方案1】:

    您可以找到未解决的问题Angular Issues

    有一个很好的解决方案twit 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]();
        }
      }
    }
    

    The full example by Alexey Zuev

    【讨论】:

    • 感谢您的建议。它就像一个魅力!可以肯定的是,您的意思是作为长期解决方案的一种变通方法?
    • 我遇到了和你一样的问题。我不知道 Angular 会用它做什么。对我来说,这似乎是一种解决方法
    猜你喜欢
    • 1970-01-01
    • 2016-07-15
    • 2018-11-20
    • 2016-06-23
    • 2019-10-30
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多