加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

数组 – Angular 4数组验证

发布时间:2020-12-17 07:16:42 所属栏目:安全 来源:网络整理
导读:我需要有关反应形式的formArray验证方面的帮助.我想验证数组中的每个项目,但我不知道我该怎么做.谢谢. HTML代码: label for="name"name:/label input formControlName="name" id="name" type="text" div *ngIf="name.invalid (name.dirty || name.touched)"
我需要有关反应形式的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>

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'); }

我试过这个:

initItemRows() {
    return this.fb.group({
      name: ['',Validators.required ],info: ['',Validators.required ]
    });
  }

它不起作用..

解决方法

您的名称和信息的获取者实际上并不针对特定的表单控件,因为您的人是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>

DEMO

另外一个建议是,你可以稍微缩短你的代码并删除一个初始化/添加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],Validators.required]      
  }))
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读