gpt4 book ai didi

javascript - 按自定义 Angular 数据表中的列进行过滤

转载 作者:行者123 更新时间:2023-12-03 02:48:31 25 4
gpt4 key购买 nike

我正在制作一个可重用的 Angular 数据表组件,您可以在其中按列进行过滤。现在,我的方法有效,但我担心这不是 Angular 的最佳实践。除了在输入中单击时将该特定列添加到“selectColInput”然后在过滤器管道中使用之外,是否还有另一种方法来过滤各个列?

数据表.component.html

<table>
<thead>
<tr>
<th *ngFor="let col of cols">
{{col.header}}
<input type="text"
[(ngModel)]=fields[col.value]
(click)="selectColInput(col.value)"/>
</th>
</tr>
</thead>
<tbody *ngFor="let row of data | filter: fields:selectedInput">
<tr>
<td *ngFor="let col of cols">{{row[col.value]}}</td>
</tr>
</tbody>
</table>

数据表.component.ts

import { ColumnsComponent } from './../columns/columns.component';
import { Component, Input } from '@angular/core';
import { FilterPipe } from './filter.pipe';

@Component({
selector: 'app-data-table',
templateUrl: './data-table.component.html',
styleUrls: ['./data-table.component.css']
})

export class DataTableComponent {

@Input() data
cols: ColumnsComponent[] = []
selectedInput: string = ''
fields: any = {}

selectColInput(col) {
this.selectedInput = col
}

addColumn(column) {
this.cols.push(column)
}

}

过滤器.pipe.ts

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

@Pipe({
name: 'filter',
pure: false
})
export class FilterPipe implements PipeTransform {

transform(data: any, fields: any, selectedInput: any): any {
if(!data) return;

return data.filter( row => {
if(row[selectedInput] !== null && row[selectedInput] && fields[selectedInput]){
return row[selectedInput].toLowerCase().includes(fields[selectedInput].toLowerCase())
}
return true
})
}

}

最佳答案

您可以使用ngModelChange设置过滤器变量,无需点击。

(ngModelChange)="selectColInput(col.value)"/>

关于javascript - 按自定义 Angular 数据表中的列进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com