Angular:ng build --prod生成类型' AbstractControl'不能分配给' FormGroup'类型的参数。

时间:2017-11-02 18:23:17

标签: angular angular-reactive-forms

出于某种原因,当我在生产中构建我的角度项目时,我有很多东西会破坏。它们几乎都是一样的,所以我用一个例子来说明。

我有一个表单,在每个部分的末尾都有一个按钮,用于检查特定FormGroup的有效性,如下所示:

<button md-button color="primary" (click)="checkValidity(changeForm.get('changeOverviewFG'))">Check</button>

该函数在我的组件类中看起来像这样。

  checkValidity(g: FormGroup) {
    Object.keys(g.controls).forEach(key => {
      g.get(key).markAsDirty();
    });
    Object.keys(g.controls).forEach(key => {
      g.get(key).markAsTouched();
    });
    Object.keys(g.controls).forEach(key => {
      g.get(key).updateValueAndValidity();
    });
  }

当我在dev中构建它时,一切正常并且按预期执行。但是当我尝试使用--prod构建它时,我收到以下错误

类型&#39; AbstractControl&#39;不能分配给&#39; FormGroup&#39;。

类型的参数

突然之间,它试图将FormGroup作为生产中的抽象控件来读取?无论哪种方式,在我的模板中,我都有很多实例遇到这种类型的错误,所以如果可能的话,修复在组件类中会更好。

有没有什么方法可以将AbstractControl显式地转换为FormGroup(我还没有找到任何暗示这是可行的)或者还有另一种简单的方法可以解决这个问题吗?

https://github.com/angular/angular/issues/10192 https://github.com/angular/angular-cli/issues/6099

这两个参考文献最接近我的问题,但那里提出的解决方案并不适用于我。

1 个答案:

答案 0 :(得分:4)

我通过传入对象而不是FormGroups或FormControls,然后在之后将它们强制转换为prod工作。就我的问题而言,我将其更改为以下内容。

checkValidity(h: Object) {
  const g = <FormGroup>h;
  Object.keys(g.controls).forEach(key => {
    g.get(key).markAsDirty();
  });
  Object.keys(g.controls).forEach(key => {
    g.get(key).markAsTouched();
  });
  Object.keys(g.controls).forEach(key => {
    g.get(key).updateValueAndValidity();
  });
}

非常感谢匿名downvote但没有反馈!我确信这肯定适合这个网站的文化。