You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中FormArray的总计计算实现方案咨询

Angular实现行小计与总计计算方案

1. 定义数据模型

首先在组件中定义每行的数据结构,包含num1、num2和subtotal三个字段:

interface RowData {
  num1: number;
  num2: number;
  subtotal: number;
}

接着初始化行数据数组:

rows: RowData[] = [{ num1: 0, num2: 0, subtotal: 0 }];

2. 实现单行小计自动计算

编写计算单行小计的方法,处理空值避免出现NaN:

calculateSubtotal(row: RowData): void {
  row.subtotal = (row.num1 || 0) * (row.num2 || 0);
}

在模板中,为num1和num2的输入框绑定input事件,实时触发小计计算:

<tr *ngFor="let row of rows; let i = index">
  <td><input type="number" [(ngModel)]="row.num1" (input)="calculateSubtotal(row)"></td>
  <td><input type="number" [(ngModel)]="row.num2" (input)="calculateSubtotal(row)"></td>
  <td>{{ row.subtotal }}</td>
  <td><button (click)="rows.splice(i, 1)">删除</button></td>
</tr>

3. 新增行功能

添加新增行的方法,初始化新行的默认值:

addRow(): void {
  this.rows.push({ num1: 0, num2: 0, subtotal: 0 });
}

在模板中添加触发按钮:

<button (click)="addRow()">新增一行</button>

4. 计算总计

使用数组reduce方法求和所有行的小计:

getTotal(): number {
  return this.rows.reduce((total, row) => total + (row.subtotal || 0), 0);
}

在模板中展示总计:

<div class="total">总计:{{ getTotal() }}</div>

5. 必要模块导入

由于使用了ngModel双向绑定,需要在模块中导入FormsModule:

import { FormsModule } from '@angular/forms';

@NgModule({
  imports: [
    // 其他已导入模块
    FormsModule
  ]
})
export class AppModule { }

内容的提问来源于stack exchange,提问作者Alluring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:15:53