【发布时间】:2022-10-07 03:11:00
【问题描述】:
我最近迁移到 Angular 14,这行代码在尝试从控件动态添加新控件时抛出异常:
formGroup.addControl(\"agreement\", new FormControl(\"\"));
错误:
error TS2769: No overload matches this call.
FormControl<...>; }>\' is not assignable to method\'s \'this\' of type \'FormGroup<{ [key: string]: AbstractCont
滚<任何,任何>; }>\'。 ……
当将鼠标悬停在有错误的行上时,我得到以下文本:
将控件添加到该组。在强类型组中,控件必须属于组的类型(可能作为可选键)。 如果具有给定名称的控件已经存在,则不会用新控件替换它。如果要替换现有控件,请改用 FormGroup#setControl setControl 方法。此方法还更新控件的值和有效性。有解决方法吗?
请在这里找到问题:stackblitz demo
更新:
这是导致问题的完整代码:
private test_formGroup() {
const formGroup = new FormGroup({
requestReference: new FormControl(\'\'),
emailRecipient: new FormControl([Validators.required, Validators.email]),
emailBodyMessage: new FormControl(\'\', Validators.required),
requestDetails: new FormControl(\'\'),
});
if (true) {
//real condition here
formGroup.addControl(\'termsOfAgreement\', new FormControl(\'\'));
}
}
如果我在 FormGroup 生成时添加控件,它可以工作:
const formGroup = new FormGroup({
requestReference: new FormControl(\'\'),
emailRecipient: new FormControl([Validators.required, Validators.email]),
emailBodyMessage: new FormControl(\'\', Validators.required),
requestDetails: new FormControl(\'\'),
termsOfAgreement: new FormControl(\'\')
});
if (true) {
//real condition here
formGroup.addControl(\'termsOfAgreement\', new FormControl(\'\'));
}
但是当你有复杂的逻辑并且你从一开始就不知道所有需要添加的控件时会发生什么?!如果您需要在创建 FormGroup 时专门添加它,“addControl”有什么好处?!
-
你可以在 stackblitz 或 github 上分享代码吗?
-
添加了 stacblitz 演示,需要等待服务器启动会报错
-
在 Angular 14 中,FormGroups 现在是 Typed-forms
标签: angular