#json #angular #typescript #httpclient #ngx-pagination
#json #угловой #typescript #httpclient #ngx-разбивка на страницы
Вопрос:
Я использую пользовательские фильтры и ngx-разбивку на страницы для своих данных JSON. Проблема здесь в том, что когда я фильтрую данные, мой элемент управления разбивкой на страницы не обновляется, по-прежнему показывая старый размер страницы и разрешая разбивку на страницы, даже если данные недоступны. Пожалуйста, предложите.
Прямо сейчас у него 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}}