当前位置: 首页 > 知识库问答 >
问题:

为什么行没有更新我的表单输入的角度7?

东方新霁
2023-03-14

我有一个angular应用程序,在其中我有一个表,在页面组件加载的最初,我将有一个表单行。然后当用户将在'description'字段中键入任何内容时,将添加另一行。

下面是component.html代码

<tr *ngFor="let fullRow of rawCannedService; let rowIndex = index;">
<td scope="row" (click)="onTypeClick()">
    <span *ngIf="isTypeLabel">Labor</span>
    <select *ngIf="!isTypeLabel" class="form-control" (blur)="onTypeBlur()" [(ngModel)]="serviceRow['type']">
        <option value="part">Part</option>
        <option value="labour">Labour</option>
    </select>
</td>
<td *ngFor="let service of fullRow.row;let i=index" (click)="onCoumnClick(i)">
    <span *ngIf="service.labelVisible">{{service.label}}</span>
    <input type="text" *ngIf="!service.labelVisible" (blur)="onColumnBlur(i,service.name)" class="form-control" [(ngModel)]="rawCannedService[rowIndex].row[i]['variableRef']">
    <!-- <app-table-cell *ngIf="!service.labelVisible" [serviceObj]="service" [colIndex]="i" [rowIndex]="rowIndex" [columnState]="onColumnBlur($event)"></app-table-cell> -->
</td>

null

所以看起来是这样的

这个过程是,当加载模态时,最初文本将代替输入,当用户单击任何列时,它将成为可编辑的输入。问题是,当用户将在description字段中键入任何内容时,我必须添加下一行。因此,当前行正在添加,但变量没有更新。它还为下一行绑定相同的值。我正在动态绑定ngmodel变量。下面是添加另一行后的结果

下面是我的component.ts代码。

 columns = [
  { field: 'type', header: 'Type', width: '15%' },
  { field: 'desc', header: 'Description', width: '40%' },
  { field: 'price', header: 'Price', width: '15%' },
  { field: 'qty', header: 'Qty', width: '10%' },
  { field: 'hrs', header: 'HRS', width: '10%' },
  { field: 'subtotal', header: 'SUBTOTAL', width: '10%' }
 ];
singleRow = [
  { name: 'desc', label: 'Please enter description', labelVisible: true, variableRef : ''},
  { name: 'price', label: '$0.00', labelVisible: true , variableRef : ''},
  { name: 'qty', label: '0', labelVisible: true, variableRef : '' },
  { name: 'hrs', label: '0', labelVisible: true, variableRef : '' },
  { name: 'total', label: '$0.00', labelVisible: true, variableRef : '' }
 ];
 rawCannedService = [];

  onCoumnClick(index: number) {
   this.rawCannedService[this.selectedRowIndex].row[index].labelVisible = false;
  }
 onColumnBlur(index: number, field: string) {
   console.log('field : ', field);
   console.log('row : ', index);
   console.log('updated state : ', this.rawCannedService);
   this.rawCannedService[this.selectedRowIndex].row[index][field] = this.serviceRow[field];
   if (field === 'desc' && this.rawCannedService[this.selectedRowIndex].row[index]['variableRef'].length > 2) {
   this.selectedRowIndex++;
   this.rawCannedService.push({row : this.singleRow});
  }
}

我是否错误地绑定了[(ngModel)]

这里有stackblitz供参考

共有1个答案

赵永逸
2023-03-14

Ahsan,您需要添加一个singleRow的“副本”,而不是singleRow,否则您就有一个唯一的行

push({row : this.singleRow.map(x=>({...x}))})
 类似资料:
  • 我正试图从我的角形中得到一些信息。我想在打字时看到输入。我得到这个错误: 这是我的表单html模板。我将ngModel放在表单输入中,我试图通过{{model.name}}绑定键入并查看我的输入。: 这是我的表单组件: 这是我app.module.ts的一部分,我在其中导入了Forms模块: 另外,如果你想查看所有代码,这里是 github 存储库。

  • 问题内容: 我有 一切都正确加载。 然后在我的JavaScript中,我尝试注入ngCookies: 但是它似乎找不到$ cookies: 问题答案: 我不确定您的功能用例是什么,但是您不能在配置块中注入服务(即服务)。仅常量和提供程序可以注入配置块内。 您可以将服务注入运行块,但我不知道这是否对您有帮助,因为我不确定您打算如何处理这些cookie。 顺便说一句:您似乎在混合主角度文件和模块的版本

  • 今天我在家里的电脑上安装了netbean,以便在家做一些工作。我安装了java 8 JDK(151),并安装了包含所有内容的netbean(没有进行自定义安装)。然后我把我的项目从github上撤下来。 我的安装文件夹是在E:\netbean我的项目文件夹是默认的c: 我加载了项目,打开XAMPP并运行它。太好了,很管用。 然后我对HTML进行了更改(修复了我犯的一个拼写错误)。再次运行。找不到零

  • choice5是一个JComboBox 从choice5中选择项目时 被称为(编辑:对于我可以选择的每个项目,我可能有一个不同的jtable我想要显示) 编辑(SSCCE): MyTableModel

  • 我想安装Primeng7.0.0到我的Angular项目,但首先我需要更新我的JHipster到最后一个版本。 当我将此命令写入terminal时,我得到以下错误

  • 我有两个表,分别名为tblOefenen(带有主键)和tblOefenen2(带有外键)。我已经删除了前面的外键,因为我想添加‘更新级联’到外键。 那么做了什么:1。我已经移除了TbloeFenen2的约束(外键)。2.我已经将新的外键添加到列ID中,我的主键在列ID上,也在表tbloefenen中: 有人能帮我一下吗?