0

我正在使用管道过滤项目

我的输入文件在 search.html 文件中,而 Itemlist 在 List.html 文件中

模型中的更改不会触发管道变换。请帮忙。下面是代码片段。

搜索.html

<input placeholder="keyword..." [(ngModel)]="search"/>

列表.html

<div *ngFor="let item of items | searchPipe:'name':search ">
  {{item.name}}
</div>

搜索.pipe.ts

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

@Pipe({
  name : 'searchPipe',
})
export class SearchPipe implements PipeTransform {
  public transform(value, key: string, term: string) {
    return value.filter((item) => {
      if (item.hasOwnProperty(key)) {
        if (term) {
          let regExp = new RegExp('\\b' + term, 'gi');
          return regExp.test(item[key]);
        } else {
          return true;
        }
      } else {
        return false;
      }
    });
  }
}
4

1 回答 1

2

好的,根据我们的讨论和笨拙,我想我有一个答案。基本上你缺少的是组件之间的通信

搜索组件:

import { Component, Output, EventEmitter } from '@angular/core';

@Component({
  selector: 'my-search',
  template: `
    <input placeholder="keyword..." [(ngModel)]="search" (keyup)=onChange()/>
    `
})

export class SearchComponent {
  search: String;
  @Output() onSearchChange = new EventEmitter<Object>();

  onChange($event) {
    this.onSearchChange.emit(this.search);
  }
}

然后是一些父组件(带列表)

import { Component } from '@angular/core';
import { SearchComponent }  from './search.component';

@Component({
  selector: 'my-app',
  template: `
   <h1>Search pipe test</h1>
    Search:  <my-search (onSearchChange)="search = $event"></my-search>
    <br/>    
    <br/>
      <div *ngFor="let item of items | searchPipe:'name':search ">
        {{item.name}}
      </div>
    `
})
export class AppComponent {
  search: String;
  items: Array<any> = [
    { id: 1, name: 'aaaaa' },
    { id: 2, name: 'bbbbb' },
    { id: 3, name: 'ccccc' },
    { id: 4, name: 'aabb' },
    { id: 5, name: 'bbcc' },
  ]
}

最后工作 plunk:http ://plnkr.co/edit/TzNQfDQ8K7d81ST9qKj5?p=preview

于 2017-05-24T10:08:25.527 回答