【发布时间】:2019-05-08 19:37:07
【问题描述】:
我想让用户创建几个选择,选择选项并将这些选项聚合到一个数组中以发送到父组件。
我正在尝试使用循环字符串数组 (valueInputs) 的 *ngFor 来执行此操作,从而为每个元素创建一个选择。添加按钮将新的空字符串推送到valueInputs,从而增加了选择的数量。最后,每个选择都会通过ngModel 更新valueInputs 的索引。
这里有一个 Stackblitz 来展示它:https://stackblitz.com/edit/angular-q5nwjq
组件:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
valueInputs = ['', '', ''];
}
模板:
<ng-container *ngFor="let valueInput of valueInputs; let i = index">
<select
[(ngModel)]="valueInputs[i]">
<option value="" disabled>Select an option...</option>
<option value="opt1">Option 1</option>
<option value="opt2">Option 2</option>
</select>
</ng-container>
<div>
<button (click)="valueInputs.push('')">Add input</button>
<p>Value Inputs: {{ valueInputs | json }}</p>
</div>
问题是:当我为第一个选择选择一个选项时,第二个选择也会改变!第二个valueInputs 索引中的实际值没有变化,只有选定的选项。
这发生在所有选择上。你改变一个,下一个也改变。
这有意义吗?或者它是Angular中的一个错误?你有什么建议可以达到同样的效果吗?
【问题讨论】:
-
您对每个输入都使用相同的模型,这是错误的原因。我认为,您应该尝试使用 FormArray。 angular.io/api/forms/FormArray
标签: angular typescript