我正在使用Ng表格顯示3列的項目列表:Name,Rack,Group。ng表格不會嚴格比較過濾空字符串
我想申請「嚴格比較」那些列,所以我所做的就是:
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)
不會返回任何結果。
我發現,當你擦除列(可以說名稱列),params.filter()將包含類似這樣的對象:{「名」:「」},它會傳送到$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()));
}
我的問題是,是不是優雅的解決方案,而這些代碼是循環對所有的搜索欄,看看其中之一是一個空的字符串。我能更快做點什麼嗎?那可以準確找到哪一列是空的並刪除該屬性?更多的東西優雅和更少hacky?