【发布时间】:2017-11-09 18:00:41
【问题描述】:
参考:https://angular.io/docs/ts/latest/api/forms/index/FormArrayName-directive.html,很容易得到一个FormArrayName:
<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>
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!
DOM <div formArrayName="cities">
使用吸气剂
get cities(): FormArray { return this.form.get('cities') as FormArray; }
一切都像魅力一样运作
但是
FormArray嵌套在另一个FormArray中时如何做getter?
让我们说这个例子:
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.
<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>
请帮助我实现这一目标。 提前谢谢你。
【问题讨论】:
-
我找到了一种解决方法:我不使用 FormNameArray 也不是姐妹城市的吸气剂,而是使用
*ngFor="let sisterCity of city.controls.sisterCities.controls代替我的嵌套 ngFor,但它对我来说确实有点难看...... -
另一个很好的解决方案stackoverflow.com/a/48527939/9583544。像魅力一样工作
标签: arrays forms angular nested getter