Jiř*_*bil 8 forms arrays validation angular angular-reactive-forms
我需要帮助以反应形式进行formArray
验证.我想验证数组中的每个项目,但我不知道我该怎么做.谢谢.
HTML代码:
<label for="name">name:</label>
<input formControlName="name" id="name" type="text">
<div *ngIf="name.invalid && (name.dirty || name.touched)">
<div *ngIf="name.errors.required">
required
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
TypeScript代码:
createForm() {
this.form = this.fb.group({
person: this.fb.array([this.initItemRows()])
});
}
initItemRows() {
return this.fb.group({
name: [''],
info: ['']
});
}
addNewRow() {
const control = <FormArray>this.form.controls['person'];
control.push(this.initItemRows());
}
deleteRow(index: number) {
const control = <FormArray>this.form.controls['person'];
control.removeAt(index);
}
get name() { return this.form.get('person.name'); }
get info() { return this.form.get('person.info'); }
Run Code Online (Sandbox Code Playgroud)
我试过这个:
initItemRows() {
return this.fb.group({
name: ['', Validators.required ],
info: ['', Validators.required ]
});
}
Run Code Online (Sandbox Code Playgroud)
它不起作用..
AJT*_*T82 17
您的干将name
和info
实际不针对具体的表单控件,因为你person
是一个formArray,例如this.form.get('person.name');
没有在您的形式存在.您需要做的是,对每个表单组使用迭代并使用其控件将该目标作为目标,因此您的模板应如下所示:
<div *ngFor="let p of form.controls.person.controls; let i = index"
[formGroupName]="i">
<label for="name">name:</label>
<input formControlName="name" id="name" type="text">
<!-- check if the name in this group has the error -->
<div *ngIf="p.controls.name.dirty">
<div *ngIf="p.hasError('required', 'name')">Required</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
另外一个建议是,你可以稍微缩短代码并删除一个初始化/添加formgroup到你的数组不需要的方法,所以在这里我删除了addNewRow
,initItemRows
当你想要添加一个新行时可以调用.
this.form = this.fb.group({
person: this.fb.array([])
});
this.initItemRows();
initItemRows() {
let ctrl = <FormArray>this.form.controls.person;
ctrl.push(this.fb.group({
name: ['', Validators.required],
info: ['', Validators.required]
}))
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14423 次 |
最近记录: |