智能 Table st-search inside nested objects
Smart Table st-search inside nested objects
有没有什么方法可以在 smart-table 中搜索嵌套元素?我向 table 提供来自 REST Api 的数据,该数据由以下形式组成:
{
"id": 1,
"small_name": "Foo",
"large_name": "Bar Foo",
"variants": [{"value": "0"}, {"value": "1"}]
}
我想要实现的是可以通过 variants
.
中对象的 value
属性 过滤数据
来自 Smart Table 文档:
"The stSetFilter replaces the filter used when searching through Smart Table. When the default behavior for stSearch does not meet your demands, like in a select where one entry is a substring of another, use a custom filter to achieve your goals."
http://lorenzofox3.github.io/smart-table-website/
该站点上还有一个示例。
我会 post 我的问题的解决方案,也许它可以帮助别人。
angular.module('YourModule').filter('CustomFilter', [
'$parse',
function ($parse) {
return function(items, filters) {
console.log(items, filters);
var itemsLeft = items.slice();
Object.keys(filters).forEach(function (model) {
var value = filters[model],
getter = $parse(model);
itemsLeft = itemsLeft.filter(function (item) {
if (model === 'value') {
var variants = item.variants.filter(function (variant) {
return getter(variant).match(value);
});
return variants.length;
} else {
return getter(item).match(value);
}
});
});
return itemsLeft;
}
}
])
有没有什么方法可以在 smart-table 中搜索嵌套元素?我向 table 提供来自 REST Api 的数据,该数据由以下形式组成:
{
"id": 1,
"small_name": "Foo",
"large_name": "Bar Foo",
"variants": [{"value": "0"}, {"value": "1"}]
}
我想要实现的是可以通过 variants
.
value
属性 过滤数据
来自 Smart Table 文档:
"The stSetFilter replaces the filter used when searching through Smart Table. When the default behavior for stSearch does not meet your demands, like in a select where one entry is a substring of another, use a custom filter to achieve your goals." http://lorenzofox3.github.io/smart-table-website/
该站点上还有一个示例。
我会 post 我的问题的解决方案,也许它可以帮助别人。
angular.module('YourModule').filter('CustomFilter', [
'$parse',
function ($parse) {
return function(items, filters) {
console.log(items, filters);
var itemsLeft = items.slice();
Object.keys(filters).forEach(function (model) {
var value = filters[model],
getter = $parse(model);
itemsLeft = itemsLeft.filter(function (item) {
if (model === 'value') {
var variants = item.variants.filter(function (variant) {
return getter(variant).match(value);
});
return variants.length;
} else {
return getter(item).match(value);
}
});
});
return itemsLeft;
}
}
])