具有多个复选框条件的 angular4 数组过滤

穆罕默德·米尔扎伊

我有一个包含 100 多个对象的数组,我使用 *ngFor 来显示对象。如何使用多个复选框条件过滤这些对象?

* 如何只选择在巴黎和伦敦以及 30 岁以下的员工?当相关复选框为真时 *

在 DOM 更改中获得最佳性能的最佳方法是什么?

export class showEmployees implements OnInit {



  constructor() { }

  ngOnInit() { }


  employees: any[] = [
    { city: 'paris', gender: 'male', age: 27 },
    { city: 'london', gender: 'female', age: 55 },
    { city: 'chicago', gender: 'male', age: 26 },
    { city: 'paris', gender: 'female', age: 56 },
    { city: 'london', gender: 'male', age: 60 },
    { city: 'chicago', gender: 'female', age: 24 },
    { city: 'london', gender: 'male', age: 54 },
    { city: 'paris', gender: 'female', age: 22 },
  ];

  list = this.employees;

  employeesFiltered = this.employees.slice();



  filterByParis(event) {

    if (event.target.value === 'paris' && event.target.checked) {
      this.employeesFiltered = this.employees.filter(
        item => item.city === 'paris'
      );

      this.list = this.employeesFiltered
    } else {
      this.list = this.employees
    }

  }

  filterByOld(event) {
    if (event.target.value === 'old' && event.target.checked) {
      this.employeesFiltered = this.employees.filter(
        item => item.age > 50
      );

      this.list = this.employeesFiltered
    } else {
      this.list = this.employees
    }
  }


}
<ul>
  <li> <input type="checkbox" value="paris" (change)="filterByParis($event)">paris</li>
  <li> <input type="checkbox" value="london" (change)="filterByLondon($event)">london </li>
  <li> <input type="checkbox" value="chicago" (change)="filterByChicago($event)">chicago </li>
  <li> <input type="checkbox" value="male" (change)="filterByMale($event)">male </li>
  <li> <input type="checkbox" value="female" (change)="filterByFemale($event)">female </li>
  <li> <input type="checkbox" value="old" (change)="filterByOld($event)"> greater than 50 </li>
  <li> <input type="checkbox" value="young" (change)="filterByYoung($event)">under 30 </li>
</ul>

<table>
  <thead>
    <th>city</th>
    <th>gender</th>
    <th>age</th>
  </thead>
  <tbody>
    <tr *ngFor="let member of list">
      <td>{{member.city}}</td>
      <td>{{member.gender}}</td>
      <td>{{member.age}}</td>
    </tr>
  </tbody>
</table>

角管是这种情况的最佳实践吗?角管是这种情况的最佳实践吗?

埃利塞奥

不要使用管道,但您只需要一个函数过滤器并使用数组和 [(ngModel)] 重新考虑您的代码。想象一下你有一个对象数组,比如

selects=[
{description:"París",type:"pais",data:"paris",value:false},
{description:"London",type:"pais",data:"london",value:false},
..
{description:"Male",type:"gender",data:"male",value:false},
{description:"Female",type:"gender",data:"female",value:false}
...
]

你可以制作一个 .html 之类的

<ul>
  <li *ngFor="let select of selects>
     <input type="checkbox" [(ngModel)]="select.value"
         (change)="refresh()">{{select.data}}
  </li>
</ul>

你的函数 refresh() 可以像

refresh()
{
    if (this.selects.find(x=>x.value)) //if there are al least one filter
    {
       this.employeesFiltered = null;
       this.selects.forEach(select=>{
        if (select.value)
        {
           switch(select.type)
           {
              case "pais":
                this.employeesFiltered=this.employeesFiltered ?
                     this.employeesFiltered.filter(e=>e.pais==select.data) :
                     this.employees.filter(e=>e.pais==select.data)
                break;
              case "gender":
                    ....
              ...
            }
           }
         }
       })
    }
    else
       this.employeesFiltered = this.employees;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

单击时过滤具有多个条件的数组(复选框元素)

来自分类Dev

对象数组过滤 angular2

来自分类Dev

数组过滤中的条件说明

来自分类Dev

根据多个复选框条件过滤数组

来自分类Dev

PHP数组过滤器有多个条件

来自分类Dev

根据多个条件和多个数组过滤?

来自分类Dev

基于选中的复选框列表的剔除数组过滤器

来自分类Dev

lodash 按 Angular 5 数组过滤对象数组

来自分类Dev

通过检查多个条件的Javascript数组过滤器

来自分类Dev

numpy数组过滤有两个条件

来自分类Dev

具有JSON数组过滤器的Filterpredicate

来自分类Dev

具有绑定值的数组过滤器

来自分类Dev

如何使用带有Postgresql的数组过滤数组

来自分类Dev

以有效的方式根据给定的数组过滤数组

来自分类Dev

如何根据带有 .includes 的数组过滤数组?

来自分类Dev

Angular4 - 取消时选中复选框

来自分类Dev

Angular JS根据类别数组过滤概述

来自分类Dev

Angular:使用数组过滤ng-repeat

来自分类Dev

根据值数组过滤Angular中JSON中的选择

来自分类Dev

Angular JS根据类别数组过滤概述

来自分类Dev

通过 Angular 2 中的子数组过滤对象列表

来自分类Dev

Angular 2 - 比较数组过滤器中的日期

来自分类Dev

jQuery复选框具有多个数据属性的过滤

来自分类Dev

数组过滤器的异步或承诺条件

来自分类Dev

VBA按字符串数组过滤作为条件

来自分类Dev

数组过滤器的异步或承诺条件

来自分类Dev

Angular 5:如何从具有 checked=true 属性的数组中获取要在编辑组件上选中的复选框?

来自分类Dev

按数组过滤的angularjs返回所有匹配结果

来自分类Dev

带有数组过滤的目录列表回显

Related 相关文章

热门标签

归档