Пользовательский Angular Pipe для реализации фильтра списка

У меня есть Pipe для фильтрации списка

import { Pipe, PipeTransform } from '@angular/core';
import { Todo } from '../interfaces/todo';

@Pipe({
  name: 'filter'
})
export class FilterPipe implements PipeTransform {

  transform(todo: Todo[], search = ''): Todo[] {
    if (!search.trim()) {
      return todo;
    }
    return todo.filter(t => t.title.toLowerCase().includes(search.toLowerCase()));
  }
}

Часть шаблона из компонента, где отрисовываются карточки, я указал pipe

            <ng-template #todosBlock>
        <div *ngIf="!loading; else loadingBlock">
          <div *ngIf="todos.length; else noTodos">
            <div class="card" *ngFor="let todo of todos | filter:search">
              <a routerLink="/todo/{{ todo.id }}">
                <span class="badge">{{ todo.id }}</span>
                {{ todo.title }}
              </a>
              <p>
                <span [class.completed]="todo.completed">{{todo.title}}</span>
                <span>
                  <button class="btn btn-danger" (click)="removeTodo(todo.id)">Удалить</button>
                  <button class="btn" [disabled]="todo.completed" (click)="completeTodo(todo.id)">Завершить</button>
                </span>
              </p>
            </div>
          </div>
          <ng-template #noTodos>
            <p>Нет Задач</p>
          </ng-template>
        </div>
    
        <ng-template #loadingBlock>
          <p>Загрузка...</p>
        </ng-template>
      </ng-template>

todo-search.component.html

<div id="search-component">
    <label for="search-box">Todo Search</label>
    <!-- <input placeholder="Search" #searchBox id="search-box" (input)="search(searchBox.value)" /> -->
    <input placeholder="Search" #searchBox id="search-box" [(ngModel)]="search" />
  
    <ul class="search-result">
      <li *ngFor="let todo of todos$ | async" >
        <a routerLink="/todo/{{todo.id}}">
          {{todo.title}}
        </a>
      </li>
    </ul>
</div>
@Component({
  selector: 'app-todo-search',
  templateUrl: './todo-search.component.html',
  styleUrls: ['./todo-search.component.scss']
})
export class TodoSearchComponent implements OnInit {
  todos$!: Observable<Todo[]>
  private searchTerm = new Subject<string>();
  search: string = '';

  constructor(private todoService: TodosService) { }

  ngOnInit(): void {
  //   this.todos$ = this.searchTerm
  //     .pipe(
  //       debounceTime(400),
  //       distinctUntilChanged(),
  //       switchMap(term => this.todoService.searchTodo(term))
  //     );
  // }

  // search(term: string): void {
  //   this.searchTerm.next(term);
  // }
  }
}

Но фильтрация не происходит, в чём ошибка ?


Ответы (0 шт):