javascript - 如何在表中选择一列以搜索其中的值?
问题描述
我刚刚用管道在我的 Angular 项目中添加了搜索栏。目前,搜索栏适用于我表中的所有元素。
我想在下拉列表中选择一列,或者只使用复选框并搜索该特定列的值。我该怎么做?
我的列来自我服务中的 getColumns() 数组。
组件.HTML
<div class="container">
<ul class="table-wrapper">
<div class="table-title">
<div class="row">
<div class="col-sm-4">
<div class="show-entries">
<span>Show</span>
<label>
<select [(ngModel)]="pageSize">
<option *ngFor="let maxPerPage of rowsOnPageSet"
(click)="maxElements(maxPerPage)">{{maxPerPage}}</option>
</select>
</label>
<span>users</span>
</div>
</div>
<div class="col-sm-4">
<h2 class="text-center">Users <b>Details</b></h2>
<button *ngIf="metadata && metadata.addMD" (click)="addFunc(metadata)">{{metadata.addMD.label}}</button>
</div>
<div class="col-sm-4">
<div class="search-box">
<div class="input-group">
-->MODIFY SOMETHING HERE
<span class="input-group-addon"><i class="material-icons"></i></span>
<input type="text" class="form-control" name="searchString" placeholder="Search..." [(ngModel)]="searchString">
</div>
</div>
</div>
</div>
</div>
<table class="table table-bordered">
<thead>
<tr>
<th *ngFor="let col of columns" (click)="sortTable(col)">{{col}}
<i *ngIf="col === columnSorted && !direction" class="material-icons">keyboard_arrow_up</i>
<i *ngIf="col === columnSorted && direction" class="material-icons">keyboard_arrow_down</i>
</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let user of users | paginate: {itemsPerPage: pageSize,
currentPage: page,
totalItems: users.length} | filterAll: searchString">
<td *ngFor="let col of columns">{{user[col]}}</td>
<td>
<button [ngClass]="getClassCondition(act.actionType)" *ngFor="let act of actions"
(click)="actionFunc(act, user)">{{act.label}}</button>
</td>
</tr>
</tbody>
</table>
<div align="center">
<!--<div class="hint-text">Showing <b>{{totUsersPerPage}}</b> out of <b>{{users.length}}</b> entries</div>-->
<ul align="center">
<pagination-controls (pageChange)="pageChanged($event)"></pagination-controls>
</ul>
</div>
</ul>
</div>
PIPE.TS
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'filterAll'
})
export class FilterPipe implements PipeTransform {
transform(value: any, searchText: any): any {
if (!searchText) {
return value;
}
return value.filter((data) => this.matchValue(data, searchText));
}
matchValue(data, value) {
return Object.keys(data).map((key) => {
return new RegExp(value, 'gi').test(data[key]);
}).some(result => result);
}
}
解决方案
推荐阅读
- javascript - 让 Javascript 中只存在同一个函数的一个实例
- django - 如何配置 Django 以查看正确的 Sass 安装?
- ios - 如何在 Xcode 9 中将 Watchkit 目标添加到 iOS 应用程序?
- c# - C# .net 与数据库的在线连接
- tsql - 动态如何将数据从多个表插入到单个表
- python - 在 Django 中渲染模板之前修改数据
- mysql - Mysql 服务器无法以 AssertionError 启动
- javascript - 在 window.load 上,有没有办法知道某个方法是否在任何地方使用
- java - java中的粗体字符串而不是将该字符串发送到打印机
- c# - 此 LINQ 查询如何获取此字符串的初始值?