Как я могу получить разницу в строке таблицы с двумя последними значениями в angular 7?

У меня есть таблица данных, как показано на рисунке:

Я добавляю данные, используя эту форму:

Когда я добавляю данные с помощью формы, значение «Чтение» будет отображаться в столбце «Чтение» в таблице.

Теперь я хочу рассчитать разницу между вновь добавленным значением и последним значением столбца «Чтение».

И хотите показать эту разницу в столбце «Использование».

Вот мой код для добавления записи:

 SaveMeterReading() {
    this.ObjMeterReadingModel.OrganizationId = this.AuthMember.OrganizationId.toString();
    this.ObjMeterReadingModel.CreatedBy = this.AuthMember.UserName;
    this.MeterReadingService.SaveMeterReading(this.ObjMeterReadingModel).subscribe(
      response => {
          if(response > 0){
            this.display = 'none';
            this.RefreshGrid();
            this.toastr.successToastr('Successfully Added', 'Success!');
          }
      },
      error => {
        console.log("Err " + error);
      }
    );

Код для получения данных:

GetAllMeterReading() {

    this.MeterReadingService.GetAllMeterReading().subscribe(
      response => {
        this.clients = response;
        this.chRef.detectChanges();
            const table: any = $('table');

            this.dataTable = table.DataTable({
                "order": [],
                "aoColumns": [
                  { "width": "10%","bSortable": false },
                  { "width": "30%"},
                  { "width": "20%"},
                  { "width": "20%"},
                  { "width": "20%","bSortable": false }
                ],
                "lengthChange": false
                // "dom": '<"left"f>r<t>ip'
            });
            this.countno = 'false';
      },
      error => {
        console.log("Err " + error);
      }
    );
  }

Сервис для получения данных:

GetAllMeterReading(): Observable<any> {
    return this.http.get(env.ROOT + "MeterReading/GetAllMeterReading").pipe(
        map((response: Response) => {
            return response.json();
        }),
        catchError((error: Response) => {
            return throwError(console.log(error));
        })
    );
  }

HTML для отображения данных в таблице:

<table class="table table-hover" cellspacing="0">
                <thead>
                  <tr>
                    <th>#</th>
                    <th>Date</th>
                    <th>Reading</th>
                    <th>Usage</th>
                    <th>Action</th>
                  </tr>
                </thead>
                <tbody>
                  <tr *ngFor="let client of clients; let idx = index">
                    <td>{{idx+1}}</td>
                    <td>{{client.MeterReadingDate}}</td>
                    <td>{{client.MeterReading1}}</td>
                    <td></td>
                    <td><button class="btn btn-primary" (click)="UpdateMeterReading(client.Id)"><i
                          class="fa fa-edit"></i></button><button class="btn btn-default ml-10"
                        (click)="showConfirmBoxForDeleteMeterReading(client.Id)"><i class="fa fa-times"></i></button>
                    </td>
                  </tr>
                </tbody>
              </table>

Как я могу добиться этого в Angular 7?


person Aamir Halai    schedule 18.03.2019    source источник
comment
почему бы вам не создать службу для извлечения конкретной записи из таблицы данных по индексу. после сохранения новой добавленной записи перед обновлением сетки получите доступ к последним записям recording и выполните свою логику использования   -  person dreamweiver    schedule 18.03.2019
comment
если вы сможете воспроизвести это на stackblitz.com, тогда мы сможем показать вам работающую логику   -  person dreamweiver    schedule 18.03.2019
comment
@dreamweiver Я обновил свой пост функцией класса обслуживания для получения данных. пожалуйста, проверьте.   -  person Aamir Halai    schedule 18.03.2019
comment
только 1_   -  person Eliseo    schedule 18.03.2019
comment
@Aamir, текущая служба, которой вы поделились, извлекает все записи, но вам нужен новый метод службы для извлечения записи по индексу (уникальные числа в таблице данных). позже вы можете вызвать этот метод, чтобы получить из него данные reading для выполнения расчета использования.   -  person dreamweiver    schedule 18.03.2019
comment
@AamirHalai, или вы можете напрямую использовать логику Eliseo's в своем шаблоне, что является самой простой логикой   -  person dreamweiver    schedule 18.03.2019
comment
Предостережение: похоже, что в вашей таблице есть кнопки, позволяющие изменить способ сортировки строк. Если это возможно, вам нужно определить, как разница должна работать в этом случае.   -  person Ingo Bürk    schedule 18.03.2019
comment
Спасибо @Eliseo за ваш ответ, ваше решение сработало для меня.   -  person Aamir Halai    schedule 18.03.2019
comment
Спасибо @dreamweiver за ваш ответ. Решение Элисеоса сработало для меня.   -  person Aamir Halai    schedule 18.03.2019
comment
Привет всем, у меня есть еще одно требование по этому поводу: когда использование превышает 50, оно должно стать красным. Любые предложения по этому поводу?   -  person Aamir Halai    schedule 18.03.2019
comment
Добавлен код ниже в ответ. Пожалуйста, проверьте.   -  person Veera    schedule 18.03.2019


Ответы (1)


Следующее решит нашу проблему и надеюсь, что это поможет вам.

Первая строка: возвращает то же значение чтения.
Другая строка: Возвращает разницу между текущими показаниями и показаниями выше строки.

              <tr *ngFor="let client of clients; let idx = index">
                <td>{{idx+1}}</td>
                <td>{{client.MeterReadingDate}}</td>
                <td>{{client.MeterReading1}}</td>
                <td [ngClass]="{'red': idx > 0 && getUsage(idx)}">{{idx>0?clients[idx].MeterReading1-clients[idx-1].MeterReading1:''}}</td>
                <td><button class="btn btn-primary" (click)="UpdateMeterReading(client.Id)"><i
                      class="fa fa-edit"></i></button><button class="btn btn-default ml-10"
                    (click)="showConfirmBoxForDeleteMeterReading(client.Id)"><i class="fa fa-times"></i></button>
                </td>
              </tr>

css

.red {
  color: red;
}

Component

getUsage(index): number {
  return (this.clients[index].MeterReading1 - this.clients[index - 1].MeterReading1) > 50;
}
person Veera    schedule 18.03.2019