代码之家  ›  专栏  ›  技术社区  ›  JordanBarber

将角度反应窗体控件传递给子组件

  •  5
  • JordanBarber  · 技术社区  · 7 年前

    我有一个父组件,我想在其中创建和存储我的反应式表单。一个表单数组中将有多个表单组实例。我想将表单控件从每个表单组传递给一个子组件,但无法确定如何执行此操作。

    这是一个 Stackblitz 展示我想做的事情。此外,有些字段只适用于某些“品牌”的汽车,这就是我在HTML中使用以下行的原因:

    <input type="text" *ngIf="car.make != 'ford'" formControlName="model">
    

    我想将“详细信息”表单组字段移到“详细信息字段”子组件中,但当我尝试这样做时,它会告诉我没有表单组实例,因此我知道父表单组没有在子组件中注册。任何帮助都非常感谢。

    1 回复  |  直到 7 年前
        1
  •  5
  •   R. Richards    7 年前

    DetailsFields Input car carIndex

    import { Component, OnInit, Input } from '@angular/core';
    import { FormGroup } from '@angular/forms';
    
    @Component({
        selector: 'app-child',
        templateUrl: './details-fields.component.html',
        styleUrls: ['./details-fields.component.css']
    })
    
    export class DetailsFields implements OnInit {
        @Input() form: FormGroup;
        @Input() car: any;
        @Input() carIndex: number;
    
        ngOnInit() { }
    }
    

    详细信息-fields.component.html [formGroup]="form" div 这是真正的钥匙。这就是告诉子模板要使用的表单组的内容。在这之后,您将在代码中从父级传递此消息。

    <div [formGroup]="form">
        <div class="car-wrap" formArrayName="cars">
            <div [ngClass]="car.make + '-car'" [formGroupName]="carIndex">
                <p class="title">This car is a {{car.make}}</p>
                <div formGroupName="details">
                  <input type="text" formControlName="make">
                  <input type="text" *ngIf="car.make != 'ford'" formControlName="model">
                  <input type="number" formControlName="year">
                </div>
                <div formGroupName="appearance">
                  <input type="text" formControlName="color">
                </div>
            </div>
        </div>
    </div>
    

    carsForm 以及

    <div id="cars" [formGroup]="carsForm">
        <div *ngFor="let car of cars; let i = index;">
            <app-child [form]="carsForm" [car]="car" [carIndex]="i"></app-child>
        </div>
    </div>