如何过滤和排序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()));            
    }
});

Plunker link

您的代码的问题在于您的数据数组仅包含字符串而不是对象,因此当您有 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};
});

Plunker Demo