html - 如何在 Angular 9 中使用 2 向绑定(bind)

标签 html angular

我正在尝试将数组的每个项目绑定(bind)到文本框的 [(ngModel)]。

组件.ts arr:string[] = ["",""];
component.html [第一种方法]


    <div class="row" *ngFor="let item of arr;">
      <div class="col-12">
        <input type="text" [(ngModel)]="item">
      </div>
    </div>


第一种方法引发错误,它在 Angular 7 中工作正常:
不能将变量“item”用作赋值表达式的左侧。模板变量是只读的。

component.html [第二种方法]

    <div class="row" *ngFor="let item of arr; let i = index">
      <div class="col-12">
        <input type="text" [(ngModel)]="arr[i]">
      </div>
    </div> 


第二种方法有效,但输入:输入单个字母后文本框失去焦点。

有人可以为我提供类似情况的完美方法吗?

最佳答案

使用 trackby

在评论中:

trackByFn(index: any, item: any) {
    return index;
  }

在 html 中:
<div class="row" *ngFor="let item of arr; let i = index ; trackBy:trackByFn">
      <div class="col-12">
        <input type="text" [(ngModel)]="arr[i]">
      </div>
    </div> 

演示的 stackblitz 链接:
https://stackblitz.com/edit/angular-cwyrs9

如果它不起作用,请告诉我

关于html - 如何在 Angular 9 中使用 2 向绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60945279/

相关文章:

html - 禁用 CSS 通配符

html - JSF 2.2 HTML5 传递属性

angular - 如何在 Angular 9 中的所有组件中使用带有表单的单个模式?

angular - 将服务相关组件移至共享模块

angular - 使用 Angular Material 按列过滤谓词表

angular - 在调整窗口大小之前,我无法正确显示 openlayer map

javascript - 如何在 jQuery 中将 JSON 格式设置为 HTML5 数据属性

html - 在 Twitter Bootstrap 框架中将语义有意义的 block 放在哪里?

javascript - 文本框我需要使用所有这些方法 onKeyDown、onMouseUp 和 onChange

angular - 如何使用 Angular CLI 在特定文件夹中生成组件?