【发布时间】:2014-06-18 15:52:23
【问题描述】:
我正在使用 Ng-Table 显示包含 3 列的项目列表:名称、机架、组。
我想对这些列应用“严格比较”,所以我所做的是:
self.tableParams = new ngTableParams({
page: 1,
// This count: 2 can be ignored as we change it in every request.
count: 50,
}, {
counts: [],
total: 100,
getData: function ($defer, params) {
var filteredData = params.filter() ? $filter('filter')(self.data, params.filter(), true) : self.data;
var orderedData = params.sorting() ? $filter('orderBy')(filteredData, params.orderBy()) : self.data;
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
您可以假设self.data 包含我的所有数据,而var self = this; 在我的控制器中。
上述代码的问题在于,当您擦除其中一列中的过滤器字符串时,$filter('filter')(self.data, params.filter(), true) 不返回任何结果。
我发现,当您在列上 erase(比如说名称列)时,params.filter() 将包含一个像这样的对象:{'name': ""} 传递给$filter('filter') 和过滤器试图只匹配空字符串!!
我试图通过添加以下代码来覆盖它:
getData: function ($defer, params) {
// When the user deletes the search text, this object keeps a variable with an empty string. The
// strict comparator will accept only empty strings. To overcome this problem we delete the property
for (var propt in params.filter()) {
if (params.filter()[propt] === '') {
delete params.filter()[propt];
}
}
var filteredData = params.filter() ? $filter('filter')(self.data, params.filter()) : self.data;
var orderedData = params.sorting() ? $filter('orderBy')(filteredData, params.orderBy()) : self.data;
$defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
我的问题是这不是一个优雅 的解决方案,并且这段代码正在循环所有搜索列以查看其中一个是否为空字符串。我可以更快地做某事吗?那能准确找到哪一列是空的并删除属性吗?更优雅和不那么老套的东西?
【问题讨论】:
标签: angularjs filter string ngtable