过滤器

时间:2017-01-18 18:36:50

标签: javascript angularjs

我有一个过滤然后分页的数据数组。它与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方法?我考虑过添加延迟,但这不是解决问题的有效方法。

0 个答案:

没有答案