use*_*739 2 angular2-forms angular2-formbuilder angular-validation angular angular2-form-validation
我看到有一个主题看起来像我的,但它并没有真正回答我的问题,因为我们没有以相同的方式管理错误。不推荐使用 FormBuilder 组
首先,我刚刚迁移到 Angular 11,现在遇到了这个问题:
group is deprecated: This api is not typesafe and can result in issues with Closure Compiler renaming.
Use the `FormBuilder#group` overload with `AbstractControlOptions` instead.
Run Code Online (Sandbox Code Playgroud)
在此页面中,我会在页面上自动生成许多表单,在日期范围的情况下,我使用两个日期选择器。我创建了一个函数来检查 2 个日期选择器中的值。
成分:
newGroup = this.fb.group(
{
[node.type + '_' + node.objectId + '_dateFrom']: [
'',
[Validators.required]
],
[node.type + '_' + node.objectId + '_dateTo']: [
'',
[Validators.required]
]
},
{
validator: CheckFromToDate(
node.type + '_' + node.objectId + '_dateFrom',
node.type + '_' + node.objectId + '_dateTo'
)
}
);
Run Code Online (Sandbox Code Playgroud)
验证器:
export function CheckFromToDate(fromName: string, toName: string) {
return (formGroup: FormGroup) => {
const from = formGroup.controls[fromName];
const to = formGroup.controls[toName];
const dateFrom = new Date(from.value);
const dateTo = new Date(to.value);
const today = new Date();
if (to.errors && from.errors) {
// return if another validator has already found an error on the matchingControl
return;
}
if (!from.value) {
from.setErrors({ wrongDate: true });
to.setErrors(null);
} else if (!to.value) {
to.setErrors({ wrongDate: true });
from.setErrors(null);
} else if (dateFrom.getTime() < -3600000) {
from.setErrors({ wrongDate: true });
to.setErrors(null);
} else if (dateFrom > today) {
from.setErrors({ wrongDate: true });
to.setErrors(null);
} else if (dateTo.getTime() < -3600000) {
to.setErrors({ wrongDate: true });
from.setErrors(null);
} else if (dateTo > today) {
to.setErrors({ wrongDate: true });
from.setErrors(null);
} else if (dateFrom.getTime() > dateTo.getTime()) {
from.setErrors({ fromTo: true });
to.setErrors({ fromTo: true });
} else {
from.setErrors(null);
to.setErrors(null);
}
};
}
Run Code Online (Sandbox Code Playgroud)
如何让我的验证器使用 Angular 11 中处理验证器的新方法?
更改您的验证器签名
return (formGroup: FormGroup)
Run Code Online (Sandbox Code Playgroud)
到
return (controls: AbstractControl)
Run Code Online (Sandbox Code Playgroud)
然后更改您访问控件的方式
const from = formGroup.controls[fromName];
Run Code Online (Sandbox Code Playgroud)
到
const from= controls.get(fromName);
Run Code Online (Sandbox Code Playgroud)
还要改变你报告错误的方式
from.setErrors({ wrongDate: true });
Run Code Online (Sandbox Code Playgroud)
到
return from.setErrors({ wrongDate: true }); // note the return statement.
Run Code Online (Sandbox Code Playgroud)
最后一个变化是改变
newGroup = this.fb.group(
{
...
},
{
validator: CheckFromToDate(
node.type + '_' + node.objectId + '_dateFrom',
node.type + '_' + node.objectId + '_dateTo'
)
}
);
Run Code Online (Sandbox Code Playgroud)
到
newGroup = this.fb.group(
{
...
},
{
validator: CheckFromToDate(
node.type + '_' + node.objectId + '_dateFrom',
node.type + '_' + node.objectId + '_dateTo'
)
} as AbstractControlOptions
);
Run Code Online (Sandbox Code Playgroud)
请注意强制转换为AbstractControlOptions,这应该删除已弃用的警告。
详细解释可以参考官方文档。
| 归档时间: |
|
| 查看次数: |
1986 次 |
| 最近记录: |