Angular: ng build --prod 生成 'AbstractControl' 类型的参数不能分配给 'FormGroup' 类型的参数
Angular: ng build --prod produces Argument of type 'AbstractControl' is not assignable to parameter of type 'FormGroup'
出于某种原因,当我在生产环境中构建我的 angular 项目但在开发环境中运行良好时,我遇到了很多问题。它们几乎都是一样的,所以我将用一个例子来说明。
我有一个表单,其中每个部分的末尾都有一个按钮,用于检查特定 FormGroup 的有效性,如下所示:
<button md-button color="primary" (click)="checkValidity(changeForm.get('changeOverviewFG'))">Check</button>
我的组件中的函数看起来像这样 class。
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 构建它时,出现以下错误
'AbstractControl' 类型的参数不可分配给 'FormGroup' 类型的参数。
所以它突然试图在生产中将 FormGroup 读取为抽象控件?无论哪种方式,在我的模板中我都有相当多的实例出现此类错误,因此如果可能的话,最好在组件 class.
中进行修复
有什么方法可以显式地将 AbstractControl 转换为 FormGroup(我在任何地方都没有发现任何暗示这是可能的)或者是否有另一种简单的方法来解决这个问题?
https://github.com/angular/angular/issues/10192
https://github.com/angular/angular-cli/issues/6099
这是两个与我的问题最相关的参考资料,但其中提供的解决方案不适用于我。
我通过传入对象而不是 FormGroups 或 FormControls,然后在之后投射它们,让事情在生产中工作。针对我的问题,我改成了下面的
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();
});
}
非常感谢没有反馈的匿名投反对票!我敢肯定,这肯定符合本网站的文化。
出于某种原因,当我在生产环境中构建我的 angular 项目但在开发环境中运行良好时,我遇到了很多问题。它们几乎都是一样的,所以我将用一个例子来说明。
我有一个表单,其中每个部分的末尾都有一个按钮,用于检查特定 FormGroup 的有效性,如下所示:
<button md-button color="primary" (click)="checkValidity(changeForm.get('changeOverviewFG'))">Check</button>
我的组件中的函数看起来像这样 class。
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 构建它时,出现以下错误
'AbstractControl' 类型的参数不可分配给 'FormGroup' 类型的参数。
所以它突然试图在生产中将 FormGroup 读取为抽象控件?无论哪种方式,在我的模板中我都有相当多的实例出现此类错误,因此如果可能的话,最好在组件 class.
中进行修复有什么方法可以显式地将 AbstractControl 转换为 FormGroup(我在任何地方都没有发现任何暗示这是可能的)或者是否有另一种简单的方法来解决这个问题?
https://github.com/angular/angular/issues/10192 https://github.com/angular/angular-cli/issues/6099
这是两个与我的问题最相关的参考资料,但其中提供的解决方案不适用于我。
我通过传入对象而不是 FormGroups 或 FormControls,然后在之后投射它们,让事情在生产中工作。针对我的问题,我改成了下面的
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();
});
}
非常感谢没有反馈的匿名投反对票!我敢肯定,这肯定符合本网站的文化。