【问题标题】:Angular Dynamic [*ngModel)] for List of Inputs输入列表的 Angular Dynamic [*ngModel)]
【发布时间】:2021-06-02 12:19:50
【问题描述】:

我正在尝试使用动态模型创建输入列表,但不幸的是,我陷入了如何正确实现这一点。

基本上,我在这里有示例.ts。对象数组的初始对象是苹果。

fruits: any[] = [
    {
        name1: 'Apple'
    }
]

在我的 UI 中,我创建了类似这样的内容:

<div *ngFor="let fruit of fruits; let i = index">
    <input type="text" [(ngModel)]="fruit.name[i]" />
</div>
    <button (click)="addNewInput()">Add new fruit</button>

当用户点击addNewInput()按钮时,它应该会自动添加一个新的输入。

但我收到一条错误消息,上面写着0 is undefined

对此或替代方法有任何帮助吗?

这里是 StackBlitz 链接:https://stackblitz.com/edit/angular-ivy-tbkzjw?file=src%2Fapp%2Fapp.component.html

【问题讨论】:

标签: angular


【解决方案1】:

您正在尝试访问 fruits['name'][0] -> 这与 fruits['name0'] 不同。

鉴于您使用的是 *ngFor,您不应该也需要使用索引位置。

fruits: any[] = [
    { name: 'Apple' },
    { name: 'Pear' }
]
<div *ngFor="let fruit of fruits; let i = index">
    <input type="text" [name]="'fruit' + i" [(ngModel)]="fruit.name" />
</div>
<button (click)="addNewInput()">Add new fruit</button>

您必须为每个输入添加一个不同的名称,但我已为此目的使用了索引。

【讨论】:

  • 但是我怎样才能得到名字和.ts文件中的某些数据呢?
  • 您想从 ts 文件访问表单中输入的值吗? [(ngModel)] 是双向数据绑定,因此对输入所做的任何更改都会反映在 fruits 数组中。
  • 是的,你是对的。但我的意思是,特定 [name] 下的数据因为 [name] 持有唯一输入的 id,因为它是索引
  • 您可以根据 ts 中的唯一属性(即名称或 id)对水果进行过滤/查找
  • 您也可以直接通过位置参数访问数组。 this.fruits[i]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
  • 2017-08-16
  • 1970-01-01
  • 2019-03-23
  • 2019-12-02
  • 2021-07-25
  • 2018-04-12
相关资源
最近更新 更多