【问题标题】:Angular 4 Filter Search Custom Pipe for selected columnsAngular 4过滤器搜索选定列的自定义管道
【发布时间】:2019-07-04 18:55:45
【问题描述】:

我创建了一个用于过滤表数据的自定义管道。现在我想添加一个包含表列的下拉列表,在选择特定列时,它将能够按该列进行搜索。 对此部分的任何帮助表示赞赏。

代码如下:

home.component.html

<select id="Select1" [(ngModel)]="selected">
      <option>EmpID</option>
      <option>EmpName</option>
      <option>Age</option>
      <option>Address1</option>
      <option>Address2</option>
    </select>

<input type="text"  placeholder="Search" [(ngModel)]="query">


<table *ngIf="employee">
    <tr>
        <th>EmpID</th>
            <th>EmpName</th>
                <th>EmpAge</th>
                <th>Address1</th>
                <th>Address2</th>
                <th>Change Detail</th>
                <th>Add Detail</th>

    </tr>

    <tr *ngFor="let employe of employee | search:query |   paginate: { itemsPerPage: 10, currentPage: p }" >
                <td>{{employe.EmpID}}</td>
                <td>{{employe.EmpName}}</td>
                <td>{{employe.Age}}</td>
                <td>{{employe.Address1}}</td>
                <td>{{employe.Address2}}</td>
                <td><button class="btn btn-primary" (click)="open(employe);">Edit</button></td>
                <td><button class="btn btn-primary" (click)="add();">Add</button></td>


    </tr>


</table>

Search.pipe.ts

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

@Pipe({
  name: 'search'
})
export class SearchPipe implements PipeTransform {

  transform(value: any, args?: any): any {

    if(!value)return null;
    if(!args)return value;

    args = args.toLowerCase();

    return value.filter(function(item){


       return JSON.stringify(item).toLowerCase().includes(args);

    });

}

home.component.ts

employee: any [] = [{
    "EmpID": "1",
    "EmpName": "mukesh12",
    "Age": "182",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},
{
    "EmpID": "2",
    "EmpName": "Rakesh",
    "Age": "1821",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},
{
    "EmpID": "3",
    "EmpName": "abhishek",
    "Age": "184",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "4",
    "EmpName": "rawt",
    "Age": "186",
    "Address1": "ktreptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "5",
    "EmpName": "boy",
    "Age": "11",
    "Address1": "Vtgdreptopelia",
    "Address2": "Ttrnneptopelia hghg"
},

{
    "EmpID": "6",
    "EmpName": "himanshu",
    "Age": "28",
    "Address1": "MStreptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "7",
    "EmpName": "katat",
    "Age": "18",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "8",
    "EmpName": "gd",
    "Age": "18",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "9",
    "EmpName": "tyss",
    "Age": "18",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},


{
    "EmpID": "10",
    "EmpName": "mukesh",
    "Age": "18",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "11",
    "EmpName": "mukesh",
    "Age": "18",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},


{
    "EmpID": "12",
    "EmpName": "lopa",
    "Age": "18",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "13",
    "EmpName": "todo",
    "Age": "18",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "14",
    "EmpName": "mukesh",
    "Age": "16",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "15",
    "EmpName": "mukesh",
    "Age": "38",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "16",
    "EmpName": "mukesh",
    "Age": "18",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "17",
    "EmpName": "see",
    "Age": "08",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "18",
    "EmpName": "hmmm",
    "Age": "18",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "19",
    "EmpName": "mukesh",
    "Age": "28",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
},

{
    "EmpID": "20",
    "EmpName": "tuta",
    "Age": "68",
    "Address1": "Streptopelia",
    "Address2": "Streptopelia hghg"
}];

如果选择了 EmpID 则在搜索字段中根据 Empid 进行搜索,如果选择 EmpName 则根据 EmpName 进行搜索............

【问题讨论】:

  • 如果选择了 EmpID 则在搜索字段中根据 Empid 进行搜索,如果选择 EmpName 则根据 EmpName 进行搜索............
  • 你的问题是什么?
  • 我想添加一个包含表格列的下拉菜单,在选择特定列时,它将能够按该列搜索
  • 将多个参数传递到您的管道中 - searchString, columnName stackoverflow.com/questions/36816788/…
  • 你能对我的代码进行更改吗?实际上我是新手。在搜索管道和模板中

标签: angular angular-pipe


【解决方案1】:

为你的管道添加另一个参数

import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'search' })
export class SearchPipe implements PipeTransform {
    transform(value: any, q?: any,colName: any="EmpName"): any {
        if(!value) return null;
        if(!q) return value;
        q = q.toLowerCase();
        return value.filter((item)=> {
            return item[colName].toLowerCase().includes(q);
        });
    }
}

home.component.html

<tr *ngFor="let employe of employee | search:query:selected |   paginate: { itemsPerPage: 10, currentPage: p }" >

【讨论】:

  • 如果我没有选择任何列并在我的模板中创建一个选项选择,例如 。然后它应该正常搜索但是当我选择列时它会像那样搜索????
  • 这方面的任何帮助都会很棒
  • transform 函数中添加一个if 以检查“选择”。
  • if(!colName) { return JSON.stringify(item).toLowerCase().includes(q); } else { return item[colName].toLowerCase().includes(q); }
  • 如果您在选择下拉列表中添加&lt;option&gt;select&lt;/option&gt;,则“选择”将作为colName 传递给管道。所以添加if(colName==='select'){//whatever you want to do} else { return item[colName].toLowerCase().includes(q); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 2017-11-29
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多