我使用ng-table创建了一个表,如下所示。
$scope.tableParams = new NgTableParams({}, {
filterOptions: { filterComparator:angular.equals },
dataset:$scope.usersList
});
这是我的HTML。
<table ng-table="tableParams" show-filter="true" class="table table-condensed table-bordered">
<tr ng-repeat="user in $data">
<td data-title="'User ID'" header-class="'text-left'" sortable="'id'" filter="{ 'id': 'text' }">
{{user.id}}
</td>
<td data-title="'Username'" header-class="'text-left'" sortable="'username'" filter="{ 'username': 'text' }">
{{user.username}}
</td>
<td data-title="'Name'" filter="{status: 'select'}" filter-data="status" sortable="'status'">{{ user.status }}</td>
</tr>
</table>
当过滤&#34;状态&#34;时,我希望输出完全匹配。但是当过滤&#34;用户名&#34;我希望它像包含一样。因为我已经给了&#34; filterComparator&#34; as&#34; angular.equals&#34; ,现在整个表被过滤为完全匹配。但是我怎样才能过滤&#34; status&#34;列是完全匹配而其他列是否包含?
答案 0 :(得分:2)
我认为不能以干净的方式完成。
对于相同的用例,我编写了一个filterComparator
函数,并根据传递给函数的参数类型决定了我想做的比较。
function filterComparator(actual, expected) {
if (expected instanceof Date) {
// using moment.js for date comparison
return moment(actual).isSame(moment(expected), 'day');
} else {
// default: case insensitive substring match
return actual.toString().search(new RegExp(expected.toString(), 'i')) != -1;
}
}
您是否能够以不同的方式解决问题?我很想听听。
答案 1 :(得分:2)
我写了一个过滤函数来比较两个字符串的相等性
angular.module('myApp').filter('equalComparator', function($filter) {
return function(values, searchTerm , property) {
var filtered = [];
if(typeof values != 'undefined' && typeof searchTerm != 'undefined') {
angular.forEach(values, function(value) {
if(value[property] == searchTerm ) {
filtered.push(value);
}
});
}
return filtered;
}
})
然后使用这个&#34; equalComparator&#34;在ngtable过滤方法中如下
if(params.filter()[//column name to filter]) {
$scope.filteredData = $filter('equalComparator')($scope.filteredData,params.filter()[//column name to filter] ,//field name to filter);
}