Forms angular2 formArray条件验证
我试图将一个字段的更改强加给formGroup中的另一个字段,该formGroup位于该组的多个实例的FormArray中。我正在其中一个字段上使用mydatepicker。例如,当日期更改时,我希望仅验证该组中的“更改原因”字段,以确保未选择第一个选项(值0)。我对此有两个问题:Forms angular2 formArray条件验证,forms,validation,angular,Forms,Validation,Angular,我试图将一个字段的更改强加给formGroup中的另一个字段,该formGroup位于该组的多个实例的FormArray中。我正在其中一个字段上使用mydatepicker。例如,当日期更改时,我希望仅验证该组中的“更改原因”字段,以确保未选择第一个选项(值0)。我对此有两个问题: 当我更改日期时,不会立即检查更改原因字段的有效性。只有在我将字段的值更改为1,然后更改为0后,才会发生这种情况。它的默认值设置为0,当我更改日期时,它应立即拾取该值 当它最终意识到表单无效时,它会对所有更新按钮进行更
subscribeDateChange(formGroup){
(this.rfcActionTasksForm).controls.tasks.controls[0]。controls['DueDate'];
const tasks=formGroup;
const changes$=tasks.controls['DueDate'].valueChanges;
更改$.subscribe(dd=>{
var arrayControl=this.rfcActionTasksForm.get('tasks')作为FormArray;
var项目=第(1)项的阵列控制;
控制台日志(项目);
if(tasks.value['ReasonForChangeId']='0'){
tasks.controls['ReasonForChangeId'].setValidators(Validators.pattern(/([1-9])/);
}
});
}
恩戈尼尼特(){
this.rfcActionTasksForm=this.\u fb.group({
任务:this.\u fb.array([this.buildTask()]))
});
}
buildTask():FormGroup{
将此返回。\u fb.group({
Id:“”,
操作:['',验证程序。必需],
步骤:“”,
AssignedToId:['',验证器。必需],
指定的颜色:“”,
到期日:['',验证者。必填],
原因变更ID:“”,
原始日期:“”,
已完成:“”,
过期:“”
},{
验证人:(formGroup:formGroup)=>{
//返回此.validateDays(formGroup);
//log(formGroup.controls['DueDate']);
//this.subscribeDateChange(formGroup.controls['DueDate'],formGroup.controls['ReasonForChangeId']);
返回此.subscribeDateChange(formGroup);
}
});
}
html:
我在这里看到了多个问题:
验证器的格式应为:
(控件:AbstractControl):{[key:string]:any}=>{
如果(有效(控制))
返回null;
其他的
返回{“myValidator”:“检测到无效的东西”};
}
您每次都返回未定义的
,因此它无法工作。
你不能订阅,因为这意味着每次你在表单中做更改时,你都会重新订阅整个组的值更改,这是没有意义的
忘记值更改,您需要同步进行控制。检查是否有错误,并使用子控件的setError()
方法
比如:
(组:FromGroup):{[key:string]:any}=>{
如果(!isValid(组)){
group.get(“myChildControl”).setErrors({“localError”:“error detected!”});
返回{“groupError”:“检测到错误!”};
}
返回null;
}
我不确定是否应该使用setError(errors,{emitEvent:false})
的第二个参数来避免传播。我在这里看到了多个问题:
验证器的格式应为:
(控件:AbstractControl):{[key:string]:any}=>{
如果(有效(控制))
返回null;
其他的
返回{“myValidator”:“检测到无效的东西”};
}
您每次都返回未定义的
,因此它无法工作。
你不能订阅,因为这意味着每次你在表单中做更改时,你都会重新订阅整个组的值更改,这是没有意义的
忘记值更改,您需要同步进行控制。检查是否有错误,并使用子控件的setError()
方法
比如:
(组:FromGroup):{[key:string]:any}=>{
如果(!isValid(组)){
group.get(“myChildControl”).setErrors({“localError”:“error detected!”});
返回{“groupError”:“检测到错误!”};
}
返回null;
}
我不确定是否应该使用setError(errors,{emitEvent:false})
的第二个参数来避免传播。谢谢。此验证函数需要精确添加到哪里?在构建组时,替换组中的箭头函数验证程序:(formGroup:formGroup)=>{…}
。谢谢。该验证函数需要准确添加到哪里?在构建组时,替换组中的箭头函数验证程序:(formGroup:formGroup)=>{…}
。