如何在angular2中制作数组搜索过滤器?

Posted

技术标签:

【中文标题】如何在angular2中制作数组搜索过滤器?【英文标题】:How to make array search filter in angular2? 【发布时间】:2017-11-08 18:52:54 【问题描述】:

我创建了一个文本框和一个数组。我想根据文本框值过滤数组项。

 <div class="searchboxt"> <input type="text" placeholder="Search Tickets" 
 class="searchboxttext" [(ngModel)]="searchfav"/> </div>
 <li class="selectlistticket" *ngFor="let fav of (favlist.slice().reverse() 
 | SearchfilterPipe: searchfav)" (mouseover)="showfavstar(fav)" (mouseleave)
 ="hidefavstar(fav)">

如何在 angular2 中过滤数组?

【问题讨论】:

***.com/questions/34417250/… 这可以帮助你。 ***.com/questions/37003551/… 请检查这对您有帮助 我需要一个代码,比如我在文本框中输入任何内容,而数组列表只需要显示相关行。在角度上,它很容易实现 AngularX 没有像 angularjs 那样带有过滤器管道,因为它们的性能很差并且阻止了激进的缩小。但是,如果您愿意,您可以轻松编写自己的 Pipes。我不会为您编写代码,但如果您想要一个零努力的解决方案,请选择一个 NPM 包,例如ng2-filter-pipe. 我为这个 nico 做了一个解决方案。请参考这个自定义管道以获得更好的结果 【参考方案1】:

import  Pipe, PipeTransform  from '@angular/core';

@Pipe(
  name: 'searchfilter',
  pure: false
)
export class SearchfilterPipe implements PipeTransform 

  transform(items: any, term: any): any 
    if (term === undefined) return items;

    return items.filter(function(item) 
      for(let property in item)
        if (item[property] === null)
          continue;
        
        if(item[property].toString().toLowerCase().includes(term.toLowerCase()))
          return true;
        
      
      return false;
    );
  

这和我预期的一样 100% 正常。将此保存为管道并将其导入 appmodule 和您的组件中。

   
     <div class="searchboxt"> <input type="text" placeholder="Search Tickets" class="searchboxttext" [(ngModel)]="searchfav"/> </div>

   <li class="selectlistticket" *ngFor="let fav of favlist.slice().reverse() | searchfilter :searchfav" (mouseover)="showfavstar(fav)" (mouseleave)="hidefavstar(fav)">

【讨论】:

以上是关于如何在angular2中制作数组搜索过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

对象数组的Angular2材质自动完成自定义过滤器

angular2过滤问题

Angular2使用管道基于对象数组过滤对象数组

Angular2 从 JSON 数组中删除重复项

如何使用过滤器在数组中搜索对象的多个键值?

如何使用 isotope.js 制作具有多个 slectbox 的搜索过滤器?