我使用ngTable指令为我的表添加了很棒的过滤功能。我的观点是:
<table ng-table="tableParams" show-filter="true" class="table table-bordered table-hover table-condensed table-striped">
<tr ng-repeat="item in items">
<td class="text-center">
<input type="checkbox" />
</td>
<td data-title="'SKU'" filter="{ 'sku': 'text' }" sortable="'sku'">
<a href="/company/item/{{ item._id }}">{{ item.sku }}</a>
</td>
<td data-title="'Description'" filter="{ 'description': 'text' }">
<a href="/company/item/{{ item._id }}">{{ item.description }}</a>
</td>
<td data-title="'Client'" filter="{ 'client.name': 'select' }">
{{ item.client.name }}
</td>
<td data-title="'Active'" filter="{ 'active': 'select' }" class="text-center">
{{ item.active }}
</td>
<td>
DEACTIVE / EDIT
</td>
</tr>
</table>
我的控制器有:
$scope.tableParams = new ngTableParams({
page: 1, // show first page
count: 10, // count per page
}, {
total: $scope.items.length, // length of data
getData: function($defer, params) {
var orderedData = params.sorting() ?
$filter('orderBy')($scope.items, params.orderBy()) : $scope.items;
orderedData = params.filter() ?
$filter('filter')(orderedData, params.filter()) : orderedData;
$scope.items = orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count());
params.total(orderedData.length); // set total for recalc pagination
$defer.resolve($scope.items);
}
});
这对于过滤项目似乎很有用
过滤到
但是,当我清除过滤器时,没有任何变化。我希望所有的行重新出现,但他们不会。想法?
答案 0 :(得分:1)
我猜它是因为你经常更改原始数组。也就是说,$ scope.items首先包含所有项目。然后筛选,并通过删除不再匹配的项来修改$ scope.items。清除过滤器时,$ scope.items仅包含与上一个过滤器匹配的项目。
首先获取$ scope.items并对其运行过滤器,然后将其分配给orderedData。然后你将$ scope.items分配给orderedData,这就是为什么$ scope.items的大小越来越小。
尝试将其更改为:
$scope.tableParams = new ngTableParams({
page: 1, // show first page
count: 10, // count per page
}, {
total: $scope.items.length, // length of data
getData: function($defer, params) {
var orderedData = params.sorting() ?
$filter('orderBy')($scope.items, params.orderBy()) : $scope.items;
orderedData = params.filter() ?
$filter('filter')(orderedData, params.filter()) : orderedData;
orderedData = orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count());
params.total(orderedData.length); // set total for recalc pagination
$defer.resolve(orderedData);
}
});
您的ng-repeat
:
<tr ng-repeat="item in $data">
由于ngTable似乎在范围内使用过滤后的数据添加了$ data属性。