*ngFor 如何使用索引将数组中的每个项目绑定到 ngModel

Posted

技术标签:

【中文标题】*ngFor 如何使用索引将数组中的每个项目绑定到 ngModel【英文标题】:*ngFor how to bind each item in array to ngModel using index 【发布时间】:2017-05-29 21:08:12 【问题描述】:

===最终更新==

http://plnkr.co/edit/WKRBB7?p=preview

由于我在表单中使用ngModel,所以我必须添加name属性。

我的错误是我使用了与其名称相同的值。

<form #myform="ngForm">
    <table>
      <tr *ngFor="let staff of staffs">
         <td><input name="name" [(ngModel)]="staff.name">staff.name</td>
      </tr>
    </table>
</form>

我改成以下后,我的问题就解决了。

<form #my2form="ngForm">
   <table>
      <tr *ngFor="let staff of staffs;let i = index">
         <td><input name="staff.i.name" [(ngModel)]="staff.name">staff.name</td>
      </tr>
    </table>
</form>

===========

抱歉,我不记得为什么我使用 names[$index].Name 而不是 x.Name。

也许几年前我在使用 x.Name 时遇到了一些错误,然后养成了使用 index 的习惯。

---更新-----

我需要一个内联编辑表,双向绑定。

<table>
   <tr *ngFor="let x of names">
     <td><input [(ngModel)]="x.Name">x.Name</td>
   </tr>
</table>

let names = [
 Name:'jim',
 Name:'tom'
];

最初页面显示:

blank text field; jim

blank text field; tom

我在第一个文本字段中输入“aaaaaa”后,它变成:

aaaaaa; aaaaaa

blank text field; tom

我认为页面最初会显示:

jim; jim
tom; tom

所以,我的问题正是,为什么缺少初始值?

【问题讨论】:

请先查看文档angular.io/docs/ts/latest 为什么不直接绑定x.Name @TamasHegedus 可能无法正常工作(不完全确定),但我记得 [(ngModel)]="..." 不适用于模板变量的错误消息,但除此之外,这是一个很好的建议 - 绝对值得一试。 你在使用 angular2-form 吗? 你能提供plunker吗? 【参考方案1】:

应该是[ngModel]="..."

<table>
   <tr *ngFor="let x of names;let i = index;">
     <td> i+ 1 </td>
     <td><input [(ngModel)]="names[i].Name">x.Name</td>
   </tr>
</table>

【讨论】:

谢谢@micronyks 我不确定他是否想要双向绑定。 ng-model 是自动双向的吗?我对 Angular1 了解不多。 是的,默认情况下它在Angular1.x,欢迎您! 感谢您的回答。您能告诉我如何在控制器(component.ts 文件)中获取 [(ngModel)]="x.Name" 的值吗? 添加(ngModelChange)="methodOnController($event)"【参考方案2】:

先生,如果您使用 *ngFor for 循环,那么我认为您不需要索引。为什么不直接使用 x.Name。这是修改后的代码。

<table>
       <tr *ngFor="let x of names;let i = index;">
         <td> i+ 1 </td>
         <td><input [(ngModel)]="x.Name">x.Name</td>
       </tr>
    </table>

或者你可以试试这个

<table>
           <tr *ngFor="let x of names;let i = index;">
             <td> i+ 1 </td>
             <td><input [value]="x.Name" [(ngModel)]="x.Name">x.Name</td>
           </tr>
        </table>

【讨论】:

感谢您的回答。您能告诉我如何在控制器(component.ts 文件)中获取 [(ngModel)]="x.Name" 的值吗?

以上是关于*ngFor 如何使用索引将数组中的每个项目绑定到 ngModel的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ngFor 的动态索引添加到 html 属性值

如果 *ngFor 让 HTML 绑定中的对象的对象返回一个空数组,如何显示占位符

将每个数组元素绑定到选项标签

在 Angular 8 中使用 *ngFor 索引从数组中渲染特定项目

Angular:如何使用 *ngFor 将指令绑定到元素

Angular 2 - ngFor while index < x