Angular FormBuild电子邮件验证在init上失败(该值是一个对象)

Angular FormBuild电子邮件验证在init上失败(该值是一个对象),angular,angular-forms,Angular,Angular Forms,在我的Angular v5.1.2项目中,我使用FormBuilder创建简单表单: this.userDetailsForm=this.formBuilder.group({ id:[{value:this.user.userid | |“”,disabled:true},[Validators.required]], 电子邮件:[{value:this.user.email | |''''},[Validators.required,Validators.email]], firstName

在我的Angular v5.1.2项目中,我使用
FormBuilder
创建简单表单:

this.userDetailsForm=this.formBuilder.group({
id:[{value:this.user.userid | |“”,disabled:true},[Validators.required]],
电子邮件:[{value:this.user.email | |''''},[Validators.required,Validators.email]],
firstName:[{value:this.user.firstName | |''''},[Validators.required]],
lastName:[{value:this.user.lastName | |''''},[Validators.required]]
});
我对
电子邮件
字段有问题。初始化表单后,它将变得无效。如果我将电子邮件字段值的初始化从对象符号切换到

email:[this.user.email,[Validators.required,Validators.email]]
事情进展顺利

我做了一点调查,在自定义验证器的帮助下,我意识到表单字段值是一个对象,在任何手动更改完成之前,它仍然是一个对象。比如说,

email:[{value:this.user.email | |''''},[Validators.required,this.myCustomValidator]],
在哪里

私有myCustomValidator(控件){
console.log(control.value);
}
提供以下信息:

  • control.value
    等于
    {value:'test@test.test'}
    在init上
  • 控件。值
    等于
    'test@test.test“
    编辑后
这就是为什么我没有看到其他文件的问题:它们只有
必需的
验证器和
!!({value:…})
始终为
true


那么,是否可以对
FormBuilder
字段初始化使用对象表示法?在我的例子中,会出现什么错误?我希望能够设置选项,如
{value:'myValue',disabled:true}
,但由于验证器问题,目前我无法使用它

角度区分所谓的装箱未装箱

装箱值是满足以下条件的值:

\u isBoxedValue(formState:any):布尔值{
返回typeof formState==='object'&&
formState!==null&&
Object.keys(formState).length==2&&
formState中的“值”&&
formState中的“残疾人”;
}

正如我们所看到的,我们应该为装箱值提供
禁用
属性

如果传递未固定值,则angular会将其视为一个值

更多信息可以在这里找到