如何过滤和排序ngtable中的数组元素?
How to filter and sort array elements in ngtable?
我有一个在 ngtable 中使用的数组,但在过滤数据时需要帮助我在单击 header 时无法进行排序。请帮忙
HTML
<table class="table" ng-table="namingConventionParams" show-filter="true">
<tr ng-repeat="item in $data | orderBy:'toString()'">
<td style="word-break:break-all" data-title="items.tableHeader" align="left" filter="{ '0': 'text' }" sortable="'valueOf()[0]'">{{item}}</td>
</tr>
</table>
控制器
$scope.namingConventionParams = new ngTableParams({
page: 1, // show first page
count: 10
}, {
defaultSort: "asc",
total: $scope.items.instanceData.length, // length of data
counts: [],
getData: function($defer, params) {
var data = $scope.items.instanceData;
var orderedData = params.filter() ? $filter('filter')(data, params.filter()) : data;
orderedData = params.sorting() ? $filter('orderBy')(orderedData, params.orderBy()) : orderedData;
params.total(orderedData.length);
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
您的代码的问题在于您的数据数组仅包含字符串而不是对象,因此当您有 sortable="valueOf()[0]"
时它仅基于第一个字符进行过滤
解决方案是改用对象。下面是需要更新的相关代码:
HTML
<td ... filter="{'name':'text'}" sortable="name">{{item.name}}</td>
JS
var data = $scope.items.instanceData.map(function(text) {
return {name: text};
});
我有一个在 ngtable 中使用的数组,但在过滤数据时需要帮助我在单击 header 时无法进行排序。请帮忙
HTML
<table class="table" ng-table="namingConventionParams" show-filter="true">
<tr ng-repeat="item in $data | orderBy:'toString()'">
<td style="word-break:break-all" data-title="items.tableHeader" align="left" filter="{ '0': 'text' }" sortable="'valueOf()[0]'">{{item}}</td>
</tr>
</table>
控制器
$scope.namingConventionParams = new ngTableParams({
page: 1, // show first page
count: 10
}, {
defaultSort: "asc",
total: $scope.items.instanceData.length, // length of data
counts: [],
getData: function($defer, params) {
var data = $scope.items.instanceData;
var orderedData = params.filter() ? $filter('filter')(data, params.filter()) : data;
orderedData = params.sorting() ? $filter('orderBy')(orderedData, params.orderBy()) : orderedData;
params.total(orderedData.length);
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
您的代码的问题在于您的数据数组仅包含字符串而不是对象,因此当您有 sortable="valueOf()[0]"
解决方案是改用对象。下面是需要更新的相关代码:
HTML
<td ... filter="{'name':'text'}" sortable="name">{{item.name}}</td>
JS
var data = $scope.items.instanceData.map(function(text) {
return {name: text};
});