【问题标题】:How can I take the value of an <input> in an *ngfor?如何在 *ngfor 中获取 <input> 的值?
【发布时间】:2021-10-11 04:03:12
【问题描述】:

我有一个可变长度的表格,在每个单元格中我都有一个输入(每个输入的默认值为 0),我需要用户编辑他想要的数据,然后当他按下按钮时我需要把所有的数据和输入的id(id总是不同的),即使是那些还没有被编辑过的,我将附上代码以便更好地理解:

<form  #login (ngSubmit)="onSubmit(login.value)" novalidate>
    <table class="rtable">
        <tr>
            <th></th>
            <th *ngFor="let column of mesi">
                {{column}}
            </th>
        </tr>

        <tr *ngFor="let row of FigProfs">
            {{row.nome}}
            <td *ngFor="let column of mesi">
                <input  id="gd{{row.id}}_{{column}}" type="number"  value=0 >
            </td>
            
        </tr>
    </table>
    <button class="btnsubmit" type="submit">AVANTI</button>
</form>

所以你可以看到输入总是不同的,因为是使用根据 ngfor 的值而变化的值生成的,所以我的问题是:有没有一种简单的方法可以在我的 ts 文件中包含所有这些值的数组?

【问题讨论】:

  • 你需要@ViewChildren()。
  • 不一定,ngModel绑定更直接。

标签: javascript html angular typescript angular-ngfor


【解决方案1】:

简单的解决方案,将ngModel 绑定到一个对象:

<input  id="gd{{row.id}}_{{column}}" type="number"  value=0 [ngModel]="get(row.id,column)" (ngModelChange)="set(row.id,column,$event)">

你的班级:

data: any = {};

get(i, j) {
  return this.data[i] && this.data[i][j];
}

set(i, j, v) {
  this.data[i] = this.data[i] || {};
  this.data[i][j] = v;
}

请随意正确设置类型。

Stackblitz demo

【讨论】:

  • 太棒了!谢谢,但我现在有两个问题:1:我正在使用 realtional db(postgresql) 我如何传递这个多维数组并在服务器中处理它?(我使用java,springboot)问题2:不知何故,现在我不能将0作为输入的默认值,value = 0似乎不再起作用,我该如何解决?再次感谢
  • 我不熟悉 java 和 springboot,但我想你可以将它作为 Map&lt;String, Map&lt;String, String&gt;&gt; 传递 - 默认为 0,不知道为什么会发生这种情况,尝试为演示制作一个 stackblitz
【解决方案2】:

使用ng-Model 直接绑定到嵌套数组元素。

模板

    <tr *ngFor="let row of FigProfs;  let i = index">
        {{row.nome}}
        <td *ngFor="let column of mesi; let j = index">
            <input  id="gd{{row.id}}_{{column}}" type="number"  [(ngModel)]="inputValues(i, j)" >
        </td>
        
    </tr>

TS

let inputValues = new Array(this.FigProfs.length).fill(new Array(this.mesi.length).fill(0));

【讨论】:

  • 感谢您的回答,但是使用此代码,我可以在用户写入后读取所有已编辑的值吗?
  • 是的,如果您在框语法中使用香蕉。答案已编辑。
  • 好的,谢谢,您知道如何通过 post 请求将矩阵形式的数据传递给我的 java 代码吗?
  • 是的。检查 Fetch API
猜你喜欢
  • 2022-12-07
  • 2014-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多