M's*_*ph' 3 forms arrays getter nested angular
引用:https : //angular.io/docs/ts/latest/api/forms/index/FormArrayName-directive.html ://angular.io/docs/ts/latest/api/forms/index/FormArrayName-directive.html,很容易获得FormArrayName:
HTML:
<form [formGroup]="form" (ngSubmit)="onSubmit()">
  <div formArrayName="cities">
    <div *ngFor="let city of cities.controls; index as i">
       <input [formControlName]="i" placeholder="City">
    </div>
  </div>
  <button>Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)
TS:
form = new FormGroup({
  cities: new FormArray([
    new FormControl('SF'),
    new FormControl('NY'),
  ]),
});
get cities(): FormArray { return this.form.get('cities') as FormArray; } 
// This does the magic!
Run Code Online (Sandbox Code Playgroud)
DOM <div formArrayName="cities"> 
使用吸气剂 
 get cities(): FormArray { return this.form.get('cities') as FormArray; }
,一切都像魅力一样工作
当FormArray嵌套在另一个FormArray中时,如何进行吸气剂处理?
假设这个例子:
TS:
form = new FormGroup({
  cities: new FormArray([
    new FormGroup({ 
      name: new FormControl('SF'),
      sisterCities: new FormArray(['Shanghai','Zurich',...])
    }),
    new FormGroup({
      name: new FormControl('NY'),
      sisterCities: new FormArray(['London','Oslo',...])
    }),
  ]),
});
get cities(): FormArray { return this.form.get('cities') as FormArray; } 
// still get the main cities FormArray
// but 
// get sisterCities() won't work because I need to target a city FormGroup (NY or SF) before accessing its sisterCities FormArray.
// and AFAIK, it is not possible to pass parameters to a getter.
Run Code Online (Sandbox Code Playgroud)
HTML:
<form [formGroup]="form" (ngSubmit)="onSubmit()">
  <div formArrayName="cities">
    <div *ngFor="let city of cities.controls; index as i" [formGroupName]="i">
       <input [formControlName]="name" placeholder="City">
       <div formArrayName="sisterCities"> <!-- this will never work -->
         <div *ngFor="let sisterCity of sisteCities.controls; index as j">
           ...
         </div>
       </div>
    </div>
  </div>
  <button>Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)
请帮助我实现这一目标。先感谢您。
我也遇到同样的问题。最后解决了。首先,我们着眼于主要形式的阵列“城市”结构。
图像上的黄色高亮控件是第一个数组控件路径。=> cities
绿色高亮显示控件是第二个数组控件。=>sisterCities
    <form [formGroup]="form" (ngSubmit)="onSubmit()">
  <div formArrayName="cities">
    <div *ngFor="let city of cities.controls; index as i" [formGroupName]="i">
       <input [formControlName]="name" placeholder="City">
       <div formArrayName="sisterCities"> <!-- this will never work -->
         <div *ngFor="let sisterCity of cities.controls[i]sisterCities.controls; index as j">
           ...
         </div>
       </div>
    </div>
  </div>
  <button>Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)
访问此第二个嵌套FormArray的正确方法是在插入当前城市索引之后访问第一个控件数组。分别sisterCities,control。
let sisterCity of cities.controls[i].sisterCities.controls
Run Code Online (Sandbox Code Playgroud)