如何对 angular 6 中 table 行中的嵌套数组字段求和?

How to sum nested array field in table row in angular 6?

我正在使用 Angular 6 和 Html。我想对嵌套数组字段求和或求和并显示在行中。

我有一个包含多个学生的数组列表 ('marksEntryList'),还有一个包含多个课程的嵌套数组列表 ('marksDistributionList')。我放了个别课程的分数,所有课程的分数都会显示在一行中。

我想要这张图片:

stackblitz

ts 文件

    marksEntryList: any = [
      {
        studentId: '101',
        studentName: "Monir Zaman",
        marksDistributionList: [
         {
          courseId: '01',
          courseTitle: "Math",
          obtainedMarks: null
         },
         {
          courseId: '02',
          courseTitle: "English",
          obtainedMarks: null
         },
         {
          courseId: '03',
          courseTitle: "Physics",
          obtainedMarks: null
         }
        ]

       },
       {
         studentId: '102',
         studentName: 'Michel Jordan',
         marksDistributionList: [
          {
           courseId: '01',
           courseTitle: "Math",
           obtainedMarks: null
          },
          {
           courseId: '02',
           courseTitle: "English",
           obtainedMarks: null
          },
          {
           courseId: '03',
           courseTitle: "Physics",
           obtainedMarks: null
          }
        ]
       }
     ]

html

    <table border="1">
      <thead>
        <tr>
          <th>ID</th> <th>Name</th><th>Admission Test Subjects</th>
        </tr>
      </thead>
      <tbody>
        <tr *ngFor="let applicant of marksEntryList">
          <td>{{applicant.studentId}}</td>
          <td>{{applicant.studentName}}</td>
          <td>
           <table>
            <th *ngFor="let testMarks of applicant.marksDistributionList">
                {{testMarks.courseTitle}}
            </th>
            <tbody>
             <tr>
              <td *ngFor="let testMarks of 
                applicant.marksDistributionList">
               <input type="text" [(ngModel)]="testMarks.obtainedMarks" />
              </td>
              <span>Total : 0</span>
             </tr>
           </tbody>
          </table>
        </td>
      </tr>
   </tbody>
 </table>

我希望对一行的所有课程分数进行总计或求和,并将其显示在总计标签中。谢谢。

在组件中创建方法 getTotal() 并从模板中调用此方法。

分量:

getTotal(marks) {
  let total = 0;

  marks.forEach((item) => {
    total += Number(item.obtainedMarks);
  });

  return total;
}

模板:

<span>Total: {{ getTotal(applicant.marksDistributionList) }}</span>

StackBlitz 上的现场演示:https://stackblitz.com/edit/angular-sum-table-ngmodel-dsfkpf

我建议为此使用响应式表单。但要回答你的问题,你只需要一个绑定到 total 元素的 total 方法。

堆栈闪电战: https://stackblitz.com/edit/angular-sum-table-ngmodel-u7pkhd

组件

getTotal(marks) {
  return marks.reduce((acc, {obtainedMarks}) => acc += +(obtainedMarks || 0), 0);
}

模板:

<span>Total : {{getTotal(applicant.marksDistributionList)}}</span>