ng2-bootstrap 分页和 bootstrap table 集成错误
ng2-bootstrap pagination and bootstrap table integration error
我正在尝试整合 ng2-bootstrap pagination component 和 bootstrap table。
我有一个简单的 bootstrap table 加载了 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
的数组,其中包含 table 的一堆条目。数组长度用于确定分页组件的totalItems
:
<pagination class="pagination-sm"
[(ngModel)]="page"
[totalItems]="data.length"
[itemsPerPage]="itemsPerPage"
[maxSize]="maxSize"
[boundaryLinks]="true"
(pageChanged)="onPageChange($event)">
</pagination>
table 的 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
。
有什么建议吗?
作为解决方法,我决定稍微更改 cutData
函数。
每次切数据前,当前页重置为1:
cutData(){
this.page = 1;
this.onPageChange({page: this.page, itemsPerPage: this.itemsPerPage})
this.data = this.data.slice(0, this.data.length/2);
}
现在一切似乎都按预期工作。
另一个选项(如here提到的类似问题)是在rows
更改后手动触发组件的更改检测:
constructor(private cd: ChangeDetectorRef) {}
(...)
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);
this.cd.detectChanges();
}
我正在尝试整合 ng2-bootstrap pagination component 和 bootstrap table。
我有一个简单的 bootstrap table 加载了 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
的数组,其中包含 table 的一堆条目。数组长度用于确定分页组件的totalItems
:
<pagination class="pagination-sm"
[(ngModel)]="page"
[totalItems]="data.length"
[itemsPerPage]="itemsPerPage"
[maxSize]="maxSize"
[boundaryLinks]="true"
(pageChanged)="onPageChange($event)">
</pagination>
table 的 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
。
有什么建议吗?
作为解决方法,我决定稍微更改 cutData
函数。
每次切数据前,当前页重置为1:
cutData(){
this.page = 1;
this.onPageChange({page: this.page, itemsPerPage: this.itemsPerPage})
this.data = this.data.slice(0, this.data.length/2);
}
现在一切似乎都按预期工作。
另一个选项(如here提到的类似问题)是在rows
更改后手动触发组件的更改检测:
constructor(private cd: ChangeDetectorRef) {}
(...)
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);
this.cd.detectChanges();
}