Angular 角度8-添加动态表单组后,如何防止反应式表单验证?

Angular 角度8-添加动态表单组后,如何防止反应式表单验证?,angular,forms,validation,angular-forms,Angular,Forms,Validation,Angular Forms,我已经创建了一个可重用组件,用于创建/编辑我的应用程序的实体。该组件具有一个反应形式,其中包含一些动态部分 整个表单按预期工作,但我遇到了验证问题:每次单击按钮向表单添加动态表单组时,都会添加显示验证错误的表单。此外,不仅要验证动态部分,还要验证表单的其余部分 似乎,添加动态部分正在执行验证,就像按下提交按钮,但它没有 我想要实现的是能够添加动态表单组,而无需此操作本身即可执行表单的验证 我是不是漏掉了什么 从'@angular/core'导入{Component,EventEmitter,I

我已经创建了一个可重用组件,用于创建/编辑我的应用程序的实体。该组件具有一个反应形式,其中包含一些动态部分

整个表单按预期工作,但我遇到了验证问题:每次单击按钮向表单添加动态表单组时,都会添加显示验证错误的表单。此外,不仅要验证动态部分,还要验证表单的其余部分

似乎,添加动态部分正在执行验证,就像按下提交按钮,但它没有

我想要实现的是能够添加动态表单组,而无需此操作本身即可执行表单的验证

我是不是漏掉了什么

从'@angular/core'导入{Component,EventEmitter,Input,OnInit,Output};
从'@angular/forms'导入{AbstractControl,FormArray,FormControl,FormGroup,Validators};
从“../shared/domain/Plan.model”导入{Plan};
从“../shared/domain/Milestone.model”导入{Milestone};
@组成部分({
选择器:“应用程序窗体”,
templateUrl:'./form.component.html',
样式URL:['./form.component.scss']
})
导出类FormComponent实现OnInit{
@输入()计划?:计划;
planForm=新表单组({
id:新表单控件(
无效的
[
需要验证器,
验证器。最小长度(4),
验证程序.模式('^[a-zA-Z0-9_-]+$)
]
),
里程碑:新表格([])
});
构造函数(){}
恩戈尼尼特(){
这个.fillForm();
}
fillForm(){
this.planForm.get('id').setValue(this.plan?this.plan.getId():“”);
this.createMilestoneFormControls();
如果(本计划){
this.planForm.get('id').disable();
}
}
createMilestoneFormControls(){
如果(!this.plan){
这个.addMilestoneToFormArray();
返回;
}
this.plan.getMilestones().forEach((里程碑:里程碑)=>{
此项。添加Milestonetoformarray(里程碑);
});
}
addMilestoneToFormArray(里程碑?:里程碑){
const milestonesFormArray=this.milestonesFormArray;
米尔斯托内斯Formarray.push(新表格组)({
描述:新表单控件(里程碑?里程碑.getDescription():“”),
startDate:新窗体控件(
milestone?milestone.getStartDate().toISOString()子字符串(0,10):“”,
[验证器。必填]
),
endDate:新表单控件(
milestone?milestone.getEndDate().toISOString()子字符串(0,10):“”,
[验证器。必填]
),
}));
}
把米尔斯托内斯特安排在一起{
将此.planForm.get(“里程碑”)作为FormArray返回;
}
从表格中删除密耳石(i:编号){
本.米莱斯塔内广场.拆除(一);
}
getValidationMessage(字段:字符串,错误:字符串):字符串{
返回此.validationMessages[field][fault];
}
getDateInputValidationMessage(字段名:string,控件:AbstractControl):string{
if(control.errors.matDatepickerMax){
返回此.getValidationMessage(字段名'matDatepickerMax');
}
if(control.errors.matDatepickerParse){
返回此.getValidationMessage(字段名'matDatepickerParse');
}
如果(!control.value&&control.errors.required){
返回此.getValidationMessage(fieldName,'required');
}
返回“”;
}
}

关系标识符
{{getValidationMessage('id','required')}
{{getValidationMessage('id','minlength')}
{{getValidationMessage('id','pattern')}
里程碑{{i+1}

描述 开始日期 {{getDateInputValidationMessage('startDate',milestone.get('startDate'))} 结束日期 {{getDateInputValidationMessage('endDate',milestone.get('endDate'))} 更新关系 建立关系
如果您未指定此项,则按钮被视为
type='submit'
。因此,表单确实会收到一个
submit
事件


将按钮更改为
,如果按钮单击时不打算提交。

我简直不敢相信。。。错过了我的按钮类型!谢谢!你成功了!