如何实现迭代的数组填充 Angular 2 输入?

How to implement iterated, array-filling Angular 2 inputs?

我希望能够 add/remove 订单中的项目并将它们聚合成一个数组以发送到后端。数据将如下所示:

找不到任何涉及迭代输入绑定的 SO 答案或文档。有人尝试过这个吗?模板代码:

<div>
  <input 
    type="text" 
    name="name" 
    title="name" 
    placeholder="Customer Name" 
    [(ngModel)]="customerName"/>
</div>
<div *ngFor="let item of itemsInNewOrder; let i = index">
  <input 
    type="text" 
    name="order" 
    title="order" 
    [(ngModel)]="itemsInNewOrder[index]"/>
</div>

在“添加新”按钮的点击功能中:

...firebaseStuff... .push({name: name, order: this.itemsInNewOrder})

不幸的是,这不起作用。提前致谢! :)

编辑1:有2个按钮触发(分别):

incrementItemsInNewOrder() {
  this.itemsInNewOrder.push("")
}
decrementItemsInNewOrder() {
  this.itemsInNewOrder.pop()
}

我能看出一个问题。您应该使用您在模板中声明的变量 i。

<div *ngFor="let item of itemsInNewOrder; let i = index">
  <input 
    type="text" 
    name="order" 
    title="order" 
    [(ngModel)]="itemsInNewOrder[i]"/> <------ HERE
</div>

编辑

angular 似乎在输入输入并再次渲染它们时进行变化检测,当发生这种情况时你会失去焦点。

但是如果你将值包装到对象中,突然它就起作用了。

组件:

itemsInNewOrder = [{value: 'Soda'}, {value: 'Burger'}, {value: 'Fries'}];

模板:

<div *ngFor="let item of itemsInNewOrder; let i = index">
    <input 
      type="text" 
      name="order" 
      title="order" 
      [(ngModel)]="itemsInNewOrder[i].value"/>
  </div>