Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 离子3多级搜索过滤器_Angular_Ionic Framework_Ionic3_Filtering - Fatal编程技术网

Angular 离子3多级搜索过滤器

Angular 离子3多级搜索过滤器,angular,ionic-framework,ionic3,filtering,Angular,Ionic Framework,Ionic3,Filtering,我想实现多级数组的搜索功能。我已将以下数据绑定到此项。(请参阅图)。然后我使用下面的TS代码进行过滤。它可以过滤类别级别,但不能过滤到产品级别 如何过滤products数组中的code?如果可能的话,desc和uom也是如此。例如,在图像中,您会看到7个项目,如果搜索中不存在所有7个项目,则不会显示整个类别。如果存在一个或多个移动项目,则将显示该项目 HTML TS文件 filterItems(param: any): void { let val: string = param;

我想实现多级数组的搜索功能。我已将以下数据绑定到此项。(请参阅图)。然后我使用下面的TS代码进行过滤。它可以过滤
类别
级别,但不能过滤到
产品
级别

如何过滤
products
数组中的
code
?如果可能的话,
desc
uom
也是如此。例如,在图像中,您会看到7个项目,如果搜索中不存在所有7个项目,则不会显示整个类别。如果存在一个或多个移动项目,则将显示该项目

HTML

TS文件

filterItems(param: any): void {
    let val: string = param;

    if (val) {
      if (val.trim() !== '') {
        this.filterItemsList = this.items.filter((data) => {
          console.log(data.category);
          return data.category.toLowerCase().indexOf(val.toLowerCase()) > -1;
        })
      }
    }
}
图像

正如我在回答中指出的,您可以将不同的条件与逻辑OR运算符组合在一起。使用此选项和,您可以尝试以下操作:

filterItems(param: any): void {
    let val: string = param;

    if (val) {
      if (val.trim() !== '') {
        this.filterItemsList = this.items.filter((data) => {
          console.log(data.category);
          return data.category.toLowerCase().indexOf(val.toLowerCase()) > -1
            || data.products.some(product => product.code.toLowerCase().indexOf(val.toLowerCase()) > -1);
        })
      }
    }
  }

这是怎么回事

some()
方法测试数组中是否至少有一个元素通过了所提供函数实现的测试

因此,我们可以轻松测试您的任何产品是否有包含搜索值的代码。您也可以对其他属性执行此操作,将它们与逻辑OR(
|
)连接起来,如for
desc
等:

return data.category.toLowerCase().indexOf(val.toLowerCase()) > -1
        || data.products.some(product => product.code.toLowerCase().indexOf(val.toLowerCase()) > -1)
        || data.products.some(product => product.desc.toLowerCase().indexOf(val.toLowerCase()) > -1);

是的,我以前看过你关于另一个话题的答案,但它只过滤了1级。矿山需要2级,例如
产品->产品.code
。谢谢你的帮助