¿Cómo obtener FormArrayName cuando FormArray está anidado en otro FormArray?
Refiriéndose a :https://angular.io/docs/ts/latest/api/forms/index/FormArrayName-directive.html, es fácil obtener un 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>
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!
El DOM<div formArrayName="cities">
usa el captadorget cities(): FormArray { return this.form.get('cities') as FormArray; }
y todo funciona como un encanto
¿Cómo hacer el captador cuando el FormArray está anidado en otro FormArray?
Digamos este ejemplo:
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.
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>
Please, help me to achieve this. Thank you in advance.