Я использую таблицу данных Angular Material для отображения списка объектов, к которым можно добавить.Когда объект добавляется в источник данных, индекс страницы разрывается и показывает отрицательный знак.Единственный способ, который я нашел, чтобы исправить это, это сбросить индекс страницы для paginator для материала на 0. Однако любые дальнейшие изменения в paginator приводят к pageIndex, равному -1, или к разбитому paginator.Вот пример:
Сначала я устанавливаю новые данные в источнике данных Angular Material следующим образом:
private refreshTable() {
// first we update the length of the paginator with the new length of the datasource data to ensure parity
this.paginator.length = this.dataSource.data.length;
// next we get the current page number so we can return to it later.
let currentPage = this.paginator.pageIndex;
this.tempSubscription2 = this.rrService.getSearchResults(this.searchEnv.outputPayload(true, true)).subscribe(
(data: any) => {
this.extractSBRs(data);
this.dataSource.data = [];
// Here is where the dataSource is reset...
this.dataSource.data = this.sbrs;
this.paginator.length = this.dataSource.data.length;
this.paginator.pageIndex = 0;
this.dataSource.paginator = this.paginator;
console.log('made it this far');
if (this.dataSource.paginator.pageIndex < currentPage) {
console.log('need to return to the current page');
this.paginator.pageIndex = currentPage;
this.paginator._pageIndex = currentPage;
this.dataSource.paginator.pageIndex = currentPage;
this.dataSource.paginator._pageIndex = currentPage;
}
},
(err: any) => {
},
() => {
}
);
}
Когда этот код выполняется, обновления с первой страницы выполняются нормально, потому что this.paginator.pageIndex
устанавливается в 0. Как только элемент добавляется на страницу больше нуля, таблица показывает первую страницу, у paginator есть pageIndex, равный -1, и paginator в пользовательском интерфейсе выглядит следующим образом:
Обратите внимание на отрицательный индекс -9 - 0
.Кажется, что очень мало примеров обновления таблицы данных угловых материалов и еще меньше, где есть дополнительные примечания о том, как их обновление влияет на пагинатор угловых материалов.Как я могу заставить paginator перейти на pageIndex, отличный от 0, без проблем с отрицательным индексом?
Я пытался обновить только this.paginator
, который захватывается через ViewChild()
в соответствии с рекомендацией здесь .Я также попытался обновить dataSource.paginator
, который вы можете увидеть в приведенном выше коде.
Вот мой импорт:
import {
AfterContentInit, AfterViewInit, ApplicationRef, ChangeDetectorRef,
Component, OnDestroy, OnInit,
ViewChild
} from '@angular/core';
import { SearchEnvironment } from "../classes/search-environment";
import { SearchFilterDropdown } from "../classes/search-filter-dropdown";
import { ActivatedRoute, Router } from "@angular/router";
import {MatTableDataSource, MatPaginator, MatDialog, MatTable, MatSnackBar} from "@angular/material";
import { RemoteRetrievalService } from "../core/services/remote-retrieval.service";
import { Observable } from "rxjs/Observable";
Как я могу получить желаемое поведение paginator возврата киндекс currentPage, не вызывая отрицательный индекс в значении paginator.pageIndex
или плохой пользовательский опыт отрицательных значений в диапазоне элементов?