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

Angular中如何将HTML表格数据传递至组件并遍历行处理?

在Angular中获取表格行数据并处理的解决方案

当然可以实现!我来给你一步步梳理解决方案,刚好能满足你遍历行数据处理的需求~

核心思路是:把每行的输入框和对应的表格数据做双向绑定,这样用户填写金额后,数据会自动同步到组件的数组里,提交时直接遍历这个数组就能拿到完整的每行数据(包括Activity Name、账户名和用户输入的Amount)。

1. 先更新数据模型,添加Amount字段

首先在ActivityResult类里新增Amount属性,用来存储用户输入的金额:

// database.service.ts
export class ActivityResult {
  Activity_Description: string;
  From_Account_Name: string;
  To_Account_Name: string;
  Amount: string; // 新增字段,存储用户输入的金额
}

2. 修改HTML模板,实现双向绑定

把原来的输入框改成双向绑定,直接关联到activityresult.Amount,同时设置独立模式避免表单组冲突:

<!-- Account.component.html -->
<form [formGroup]="CmForm" (ngSubmit)="submit()" name="CmForm" >
  <div class="form-group">
    <label for="dateselection">Enter Date you are processing.</label>
    <input type="date" id="dateselection" 
           value="{{ yesterday | date:'yyyy-MM-dd'}}" 
           min="2015-01-01" max="{{ yesterday | date:'yyyy-MM-dd'}}" 
           (change)="changedDate($event)" class="datepicker" />
    <br>
    <br>
    <br><h3>Cash Movement</h3>
    <table class="responstable" >
      <tr>
        <th>Activity Name</th>
        <th>From Account </th>
        <th>To Account </th>
        <th>Amount</th>
      </tr>
      <tr *ngFor="let activityresult of activityresults" >
        <td>{{activityresult.Activity_Description}}</td>
        <td>{{activityresult.From_Account_Name}}</td>
        <td>{{activityresult.To_Account_Name}}</td>
        <!-- 双向绑定到activityresult的Amount字段,设置standalone避免表单校验冲突 -->
        <td><input type="textbox" [(ngModel)]="activityresult.Amount" [ngModelOptions]="{standalone: true}"></td>
      </tr>
    </table>
    <br>
    <input type="submit" value="Submit" /><br><br>
    <br><br><br><br>
  </div>
</form>

3. 在组件中实现提交逻辑

新增submit方法,直接遍历activityresults数组,调用你的服务处理每行数据:

// Account.component.ts
import { ActivityResult } from './../database.service';
import { FormGroup, FormControl, Validators } from '@angular/forms';

export class AccountComponent implements OnInit {
  CmForm: FormGroup;
  activityresults: Array<ActivityResult>;
  yesterday: Date; // 初始化昨天的日期,避免模板报错

  constructor( private databaseService: DatabaseService ) {}

  ngOnInit() {
    // 计算昨天的日期
    const today = new Date();
    this.yesterday = new Date(today.setDate(today.getDate() - 1));

    this.CmForm = new FormGroup({
      'dateselection': new FormControl(null, [Validators.required])
    });

    // 获取初始活动数据
    this.databaseService.getActivity().subscribe(
      activityresults => this.activityresults = activityresults
    );
  }

  // 提交处理方法
  submit() {
    // 可选:过滤掉未填写金额的行
    const validRows = this.activityresults.filter(row => row.Amount?.trim());
    
    // 遍历每行数据调用服务
    validRows.forEach(row => {
      this.databaseService.getData(row).subscribe(
        accountResults => {
          // 这里处理接口返回结果,比如打印、存储到变量等
          console.log('处理完成:', accountResults);
          // 如果需要存储所有结果,可以用数组收集:this.accountResults.push(accountResults)
        }
      );
    });
  }

  // 实现日期变更方法(模板中用到)
  changedDate(event: Event) {
    const selectedDate = (event.target as HTMLInputElement).value;
    console.log('选中日期:', selectedDate);
    // 这里可以添加日期相关的业务逻辑
  }
}

4. 补充服务中的getData方法

确保你的DatabaseService里有接收ActivityResult参数的getData方法:

// database.service.ts
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

export class DatabaseService {
  constructor(private _http: HttpClient) {}

  getActivity(): Observable<ActivityResult[]> {
    const url = 'http://localhost:3000/a';
    const data = ({ });
    return this._http.post(url, data)
      .pipe(
        map((res) => {
          console.log(res);
          return <ActivityResult[]> res;
        })
      );
  }

  // 新增处理单条数据的方法
  getData(account: ActivityResult): Observable<any> {
    const url = '你的接口地址'; // 替换成实际的后端接口URL
    return this._http.post(url, account)
      .pipe(
        map(res => {
          console.log('接口返回:', res);
          return res;
        })
      );
  }
}

这样修改后,用户点击提交时,activityresults数组里的每个对象都会包含完整的四个字段,你可以像预想的那样遍历数组,调用服务处理每行数据啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:08:50