出于某种原因,当我在生产中构建我的角度项目时,我有很多东西会破坏。它们几乎都是一样的,所以我用一个例子来说明。
我有一个表单,在每个部分的末尾都有一个按钮,用于检查特定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
这两个参考文献最接近我的问题,但那里提出的解决方案并不适用于我。
答案 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但没有反馈!我确信这肯定适合这个网站的文化。