我有一个过滤然后分页的数据数组。它与md-virtual-repeat
一起显示。我需要在每次搜索后更新totalPages
,以便在搜索发生时应用适当的分页。这就是我在搜索框中所拥有的:
<input data-onyx-textbox="search" ng-model="$ctrl.searchInput" style="width:60%;" ng-change="$ctrl.updatePgSize()"
ng-model-options="{ updateOn: 'default blur', debounce: { 'default':500, 'blur':0 } }" placeholder="search" />
这是显示
<div md-virtual-repeat-container>
<div md-virtual-repeat="s in $ctrl.filtered = ($ctrl.schedules | filter:{name:$ctrl.searchInput}) | startFrom:($ctrl.currentPage-1)*$ctrl.pageSize | limitTo:$ctrl.pageSize">
<span>{{ s.name }}</span>
<span>{{ s.length }}</span>
</div>
</div>
以下是我在控制器中更新totalPages
public updatePgSize = () => {
this.totalPages = Math.ceil(this.filtered.length/this.pageSize);
}
我遇到的问题是,当更改搜索框时,会在应用过滤器并ng-change
更改之前立即调用filtered
。因此,如果原始数组有30个元素,那么在updatePgSize
函数的第一次调用中,它会认为filtered
也有30个元素,因为实际过滤后还没有运行。我怎样才能在过滤后调用updatePgSize
方法?我考虑过添加延迟,但这不是解决问题的有效方法。