Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 角度反应式表单控制错误:如何读取错误对象_Typescript_Angular Reactive Forms - Fatal编程技术网

Typescript 角度反应式表单控制错误:如何读取错误对象

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

我有许多自定义验证器,它们将应用于Angular 7中动态生成的反应式表单中的字段

模板如下所示:


{{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”属性,请参考此链接