Фильтровать реализацию поисковой трубы

Я фильтрую элементы, используя канал для фильтрации

Мои входные данные находятся в файле search.html, а Itemlist - в файле List.html.

Изменение в модели не запускает трансформацию трубы. Пожалуйста помоги. Ниже приведен фрагмент кода.

search.html

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

list.html

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

Search.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;
      }
    });
  }
}

1 ответ

Хорошо, основываясь на нашей дискуссии и мнениях, я думаю, что у меня есть ответ. По сути, вам не хватает связи между компонентами

Компонент поиска:

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' },
  ]
}

и, наконец, работающий план: http://plnkr.co/edit/TzNQfDQ8K7d81ST9qKj5?p=preview

Другие вопросы по тегам