ngx-разбивка на страницы не обновляется после фильтрации данных

#json #angular #typescript #httpclient #ngx-pagination

#json #угловой #typescript #httpclient #ngx-разбивка на страницы

Вопрос:

Я использую пользовательские фильтры и ngx-разбивку на страницы для своих данных JSON. Проблема здесь в том, что когда я фильтрую данные, мой элемент управления разбивкой на страницы не обновляется, по-прежнему показывая старый размер страницы и разрешая разбивку на страницы, даже если данные недоступны. Пожалуйста, предложите.

Прямо сейчас у него 21 результат без применения какого-либо фильтра Прямо сейчас у него 21 результат без применения какого-либо фильтра

Теперь, я применил фильтры n, теперь он показывает только 1 запись, но разбивка на страницы по-прежнему показывает 5 страниц (учитывая 5 на размер страницы).

введите описание изображения здесь

таблица-filter.pipe.ts

 import { Pipe, PipeTransform } from "@angular/core";

@Pipe({
  name: "tableFilter"
})
export class TableFilterPipe implements PipeTransform {
  transform(list: any[], filters: any) {
    const keys = Object.keys(filters).filter(key => filters[key]);
    const filterUser = (user: { [x: string]: any; }) =>
      keys.every(key => {
        if (key == "sdob") {
          return new Date(user["dob"]) >= new Date(filters[key]);
        } else if (key == "edob") {
          return new Date(filters[key]) >= new Date(user["dob"]);
        } else {
          return user[key] === filters[key];
        }
      });
    return keys.length ? list.filter(filterUser) : list;
  }
}
 

app.component.html

 <table class="table table-sm table-responsive">
      <thead>
        <tr>
          <th></th>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Email</th>
          <th>Gender</th>
          <th>DOB (mm/dd/yyyy)</th>
          <th>Impact</th>
          <th>Score</th>
          <th></th>
        </tr>
      </thead>
      <tbody>
        <tr class="record-row" (click)="viewUser(user)" *ngFor="let user of allUser | tableFilter: form.value | paginate: { id: 'listing_pagination', itemsPerPage: 5, currentPage: page, totalItems: totalRecords }">
          <td><input *ngIf="!isEdit" [(ngModel)]="user.checked" type="checkbox" (change)="checkboxClicked()"></td>
          <td>{{user.first_name}}</td>
          <td>{{user.last_name}}</td>
          <td>{{user.email}}</td>
          <td>{{user.gender}}</td>
          <td>{{user.dob}}</td>
          <td>{{user.impact}}</td>
          <td>
            <div [ngClass]="getClass(user)">{{user.score}}</div>
          </td>
          <td>
            <button *ngIf="!isEdit" class="btn btn-primary btn-sm" (click)="editUser(user)">Edit</button>
            <button class="btn btn-primary btn-sm btn-sm ml-2" (click)="deleteUser(user)">Delete</button>
          </td>
        </tr>
      </tbody>
    </table>
    <pagination-controls id="listing_pagination" directionLinks="true" (pageChange)="page = $event"></pagination-controls>
 

Комментарии:

1. старайтесь не переходить totalItems: totalRecords на разбивку на страницы в *ngFor или просто сохраняйте paginate: { itemsPerPage: 5, currentPage: page }

2.@LuayAL-Assadi спасибо, я хотел также обновить общее количество, как только фильтр, поскольку он по-прежнему показывает общее количество, а не обновляется после применения фильтра. getLatestUser() { this.commonService.getAllUser().subscribe((response) => { this.allUser = response; this.totalRecords = this.allUser.length; this.getApplicableCounts(); this.allUser.forEach((row: any) => row.checked = false); }); } Total: {{totalRecords}}