【问题标题】:Angular Dynamic Nested Array Not Displaying Error角度动态嵌套数组不显示错误
【发布时间】:2021-06-21 18:28:19
【问题描述】:

我有以下嵌套数组工作完美,除了第二层和第三层不会显示来自验证器的错误消息。我认为它与返回值有关,因此它将返回对象而不显示“null”错误。任何帮助表示赞赏。

component.ts

constructor(
    public formBuilder: FormBuilder,
    private router: Router,
    private ngZone: NgZone,
    private crudService: CrudService
  ) { 
    this.portfolioForm = this.formBuilder.group({
      program_title: ['', Validators.required],
      ...
    })
  }
  
addProject() {
    let control = <FormArray>this.portfolioForm.controls.projects;
    control.push(
      this.formBuilder.group({
        project_title: ['', Validators.required],
        ...
      })
    )
  }

component.html

<form [formGroup]="portfolioForm" (ngSubmit)="onSubmit()">
  <div class="row pl-3 pr-3">
    <div class="col-7 card-body widget-body">
      <div class="form-group">
        <label for="textarea">Program Title</label>
        <input type="text" class="form-control form-control-sm checking-field" formControlName="program_title" required>
        <span class="help-block text-danger" *ngIf="portfolioForm.get('program_title').touched && portfolioForm.get('program_title').hasError('required')">Title is required</span>                              
                    

...

  <div formArrayName="projects">
    <div *ngFor="let project of portfolioForm.get('projects')['controls']; let i=index">
      <fieldset>
        <div [formGroupName]="i">
          <div class="row pl-3 pr-3">
            <div class="col-1 card-body"></div>
              <div class="col-6 card-body">
                <div class="form-group">
                  <label for="textarea">Project {{i+1}} Title</label>
                  <input type="text" class="form-control form-control-sm checking-field" formControlName="project_title" required>
                  <span class="help-block text-danger" *ngIf="portfolioForm.get('project_title') && portfolioForm.get('project_title').touched && portfolioForm.get('project_title').hasError('required')">Title is required</span>                              

【问题讨论】:

    标签: angular validation multidimensional-array error-handling formbuilder


    【解决方案1】:

    添加这个方法动态检查,并插入你的标题*ngIf

    subProjectTitleError(form: FormGroup, i: number, j: number): boolean {     return form.dirty && this.portfolioForm.get('projects').get(String(i)).get('subprojects').get(String(j)).get('subproject_title').value === ''   }
    

    【讨论】:

    • 我无法使用它来工作,但创建了一个快速而肮脏的 StackBlitz:stackblitz.com/edit/angular-ivy-ckczn9
    • stackblitz.com/edit/… 您正在进行一些密集的嵌套。不确定是否需要将所有数组“推送”实例都设为 formGroup。您可能只需将控件推送到该表单 = 以前的名称 + 迭代编号。以下是您如何深入该值以检查它是否有效:this.portfolioForm.get('projects').get('0').get('subprojects').get('0').get('subproject_title').value === '' 这是获取 0 索引,您必须分别添加您的 i / j 变量。
    • 在每个实例中控制您的表单并一直遵循它会很有帮助。
    • 谢谢。你在 StackBlitz 中尝试过吗?我仍然无法为项目或子项目显示错误。
    • 是的,它正在工作:stackblitz.com/edit/…
    猜你喜欢
    • 1970-01-01
    • 2019-07-11
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多