Я пытаюсь интегрировать компонент разбивки на страницы ng2-bootstrap и таблицу начальной загрузки.
У меня есть простая таблица начальной загрузки, которая загружается с помощью директивы ngFor:
<tr>
<th *ngFor="#col of cols">{{col.header}}
</tr>
</thead>
<tbody>
<tr *ngFor="#row of rows">
<td *ngFor="#col of cols">{{row[col.field]}}</td>
</tr>
</tbody>
Содержимое rows
определяется компонентом разбивки на страницы: у меня есть массив с именем data
, который содержит набор записей для таблицы. Длина массива используется для определения totalItems
компонента пагинации:
<pagination class="pagination-sm"
[(ngModel)]="page"
[totalItems]="data.length"
[itemsPerPage]="itemsPerPage"
[maxSize]="maxSize"
[boundaryLinks]="true"
(pageChanged)="onPageChange($event)">
</pagination>
Переменная rows
таблицы содержит только записи текущей страницы. Это делается с помощью события pageChange
, предоставляемого компонентом пагинации:
onPageChange(page:any) {
let start = (page.page - 1) * page.itemsPerPage;
let end = page.itemsPerPage > -1 ? (start + page.itemsPerPage) : this.data.length;
this.rows = this.data.slice(start, end);
}
Пока все хорошо... Проблема в том, что записи могут быть удалены из массива data
. Если панель пагинации указывает на последнюю страницу, а затем записи удаляются из массива data
, в консоли отображается следующая ошибка:
Expression 'rows in App@9:8' has changed after it was checked.
Живой пример можно найти здесь: http://plnkr.co/edit/5zxamBiWISBpEmXYP5UK?p=preview Просто нажмите кнопку last
, а затем cut data
.
Любой совет?