【问题标题】:Using multiple fields on Filter Pipe | Angular 4在过滤管道上使用多个字段 |角 4
【发布时间】:2017-09-28 20:15:30
【问题描述】:

我想知道如何使用 Pipe 来过滤使用多个输入字段的 json 对象,这是我的代码到目前为止只有一个字段按名称过滤:

TS

members = [
    {name:'Carl', country:"Brazil"},
    {name:'John', country:"United States"},
    {name:'Madhu', country:"India"}
  ]

PIPE.TS

  transform(members: any, term: any): any {
//check if search term is undefined
if (term === undefined) return members;

//return updated members array
return members.filter(function(member){
  return member.name.toLowerCase().includes(term.toLowerCase());
})
  }

HTML

<input type="text" [(ngModel)]="term" name="any"/>

          <li *ngFor="let member of members | filter:term">

              <h3>{{member.name}}</h3>
              <span>{{member.country}}</span>

          </li>

我想添加一个额外的输入字段,用于搜索国家/地区。

编辑:

它使用以下代码:

TS 组件

 fields: any  = { name: "", country: "" };
  filters: any = { name: "", country: "" };

  updateFilters(): void {
      this.filters = Object.assign({}, this.fields);
      console.log(this.filters);
  }

HTML

<input type="text" name="any" [(ngModel)] = "fields.name" (ngModelChange)="updateFilters()"/>
          <input type="text" name="anyy" [(ngModel)] = "fields.country" (ngModelChange)="updateFilters()"/>

<li *ngFor="let member of members | filter: filters">
            <div style="border-bottom: 1px solid; border-color:rgba(0,0,0,0.3);margin-bottom:15px">
              <h3>{{member.name}}</h3>
              <span>{{member.country}}</span>
            </div>
          </li>

PIPE.TS

  transform(members: any, filters: any): any {
    return members.filter(item => {
    return (item.name.toLowerCase().indexOf(filters.name.toLowerCase()) >= 0 && item.country.toLowerCase().indexOf(filters.country.toLowerCase()) >= 0);

    });
  }

【问题讨论】:

    标签: javascript angular typescript


    【解决方案1】:

    你可以传递一个对象而不是多个字段:

    <li *ngFor="let member of members | filter: filters">
    

    在你的组件类中:

    filters: any = { name: "ex", country: "a country" };
    

    更新:

    <input type="text" [(ngModel)] = "fields.name" (ngModelChange)="updateFilters()"/>
    <input type="text" [(ngModel)] = "fields.country" (ngModelChange)="updateFilters()"/>
    

    在您的组件中:

    fields: any  = { name: "", country: "" };
    filters: any = { name: "", country: "" };
    
    updateFilters(): void {
        this.filters = Object.assign({}, this.fields);
    }
    

    【讨论】:

    • 它没有用,我想 应该是这样的?
    • 我明白你的回答,但我该如何处理多个输入字段?
    • 没有错误,您的代码没有回答我将如何使用多个字段。
    • 好的,试着让你的管道不纯。查看更新的答案
    • 没用,我们不应该在 PIPE.TS 上的变换功能上做些改变吗?另外,输入上的 [(ngModel)] 应该是什么样的?
    猜你喜欢
    • 2017-05-31
    • 2018-06-16
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2018-12-01
    • 2011-07-18
    相关资源
    最近更新 更多