Angular 动态复选框过滤实现

Angular dynamic checkbox Filtering implementation

提前致谢

我的要求是制作一个带有名称搜索(完成)和复选框的自定义过滤器,通过将复选框值与行[[=33匹配来过滤Table的行(对象数组) =]](字符串数组)和 returns 行,如果标签数组由复选框中的值组成,
问题是过滤器(复选框)是从数据库获得的并动态填充因此我不能使用 ngmodel

非常感谢任何实现想法,我已经看到很多关于静态过滤器和一些使用管道的过滤器的问题,但是如何处理动态情况

到目前为止我的实施,
模板:

<div id="searchByTag" *ngFor="let tag of tagList">
   <input
     type="checkbox"
     (change)="filterByTags(tag, $event)"
   />{{ tag }}
 </div>

TS:

rows=[{},{}]  //from db
temp = rows    // copied when getting row from db

filterByTags(FilterTag, event) {
    if (event.target.checked) {
      const filteredRow = this.rows.filter((obj) => {
          return tag.includes(FilterTag.toLowerCase());
      });
      this.rows = filteredRow;
    } else {
      return (this.rows = this.temp);
    }
  }

行对象:

{ 
    "xx":'yyy',
    ....,
    "tags" : [
        "org", 
        "pcb",

    ]
}

另外一个问题是过滤技术目前returns只有一行符合条件(清除),但主要是标签的动态实现

你可以有 ngModel:

如果这是你的复选框 = ["org", "pcb"];

那么你只需要一条记录来绑定复选框值:

checkboxes: {[id: string]: {value: any}} = {};
for(let tag of this.tags) {
   this.checkboxes[tag] = {value: false}
}

现在在您的模板中:

<input type="checkbox" *ngFor="let item of tags" 
  [(ngModel)]="checkboxes[item].value">

你可以在这个 stackblitz 中看到这个: stackblitz