Typescript 角度反应式表单控制错误:如何读取错误对象
我有许多自定义验证器,它们将应用于Angular 7中动态生成的反应式表单中的字段 模板如下所示:Typescript 角度反应式表单控制错误:如何读取错误对象,typescript,angular-reactive-forms,Typescript,Angular Reactive Forms,我有许多自定义验证器,它们将应用于Angular 7中动态生成的反应式表单中的字段 模板如下所示: {{field.label} {{errorMessageResolver(字段,dynForm.controls[field.name].errors)} 如您所见,我有一个函数,它从表单中提取生成的ValidationError并将其提供给以下函数: errorMessageResolver(字段:字段,错误:ValidationErrors){ log('valids='+field.v
{{field.label}
{{errorMessageResolver(字段,dynForm.controls[field.name].errors)}
如您所见,我有一个函数,它从表单中提取生成的ValidationError并将其提供给以下函数:
errorMessageResolver(字段:字段,错误:ValidationErrors){
log('valids='+field.validations.length);
console.log(错误);
日志(错误为ValidationErrors);
console.log(errors.hasOwnProperty('required');
log(errors.hasOwnProperty('minLength');
console.log(errors.minLength);
log(errors.hasOwnProperty('maxLength');
}
大量控制台日志记录的结果是:
正如我希望您可以看到的,minLength ValidationError肯定会出现,因为您可以看到控制台输出:
{ minLength: {...}}
但是下面尝试的控制台应该显示,似乎没有一种方法可以获得实际值。那么,如何获取密钥及其值呢?不幸的是,角形表单不提供验证消息/值。它们是非常简单的对象,只显示附加到
表单控件
的每个验证器
的名称,
不满足其要求
因此,当minLength
错误存在时,这意味着验证器返回的是无效的,否则在errors对象中根本看不到minLength
在您的示例中,您为
元素提供了字段的formControlName
。您应该能够通过方法中的FormControl的
属性访问错误,如:
if(errors['required']) {
// The required validator returned invalid
}
或者使用窗体控件上的方法,如下所示:
if(this.form.get(field.name).hasError('required')) {
// The required validator returned invalid
}
请注意,之所以errors.minLength
返回undefined
,是因为error
对象的类型如下所示:{[key:string]:any;}
即它是一个。属性访问器失败,因为它实际上没有名为minLength
的属性。谢谢您的回答:实际上,即使获得名称也可以,因为我可以使用它返回错误消息。除了JSON.stringify()之外,似乎没有任何东西可以让您理解“minLength”键,有关更多详细信息,请参阅我的编辑。希望它有帮助。它是minlength和小写L。我希望这不会让您感到困惑。您可以在html表单中使用“errorMessage”属性,请参考此链接