Angular Observable 过滤不起作用

Angular Observable filtering doesn't working

我有一个 Observable 数组,我想通过一些属性来过滤它。但是,过滤不起作用。 我尝试调试代码,但好像它没有进入 pipe(map(... 部分。

ngOnInit() {
    this.bookService.getBooks().subscribe(res => {
      this.store.dispatch(listBooks({ books: res }));
    });

    this.filterForm = this.formBuilder.group({
      name: [""],
      author: [""],
      release_year: [""]
    });

    this.filterForm.valueChanges.subscribe(val => {
      this.books$.pipe(map(books => 
        books.filter(b => {
          return b.name.startsWith(val.name) &&
          b.author.startsWith(val.author) &&
          b.release_year.startsWith(val.release_year)
        })
      ))
    })

这看起来不像是一个完整的示例 - 例如this.book$ 是什么?

此外,您的 pipe() 似乎没有以 subscribe() 结尾 - 因此永远不会做任何事情

你的这行代码永远不会执行 this.books$.管道( 因为你不订阅 it.any observable 需要订阅才能执行。

最好像下面的代码那样更改您的代码:

  this.filterForm.valueChanges
  .pipe(
   withLatestFrom(this.books$),
   map(([val,books])>
      books.filter(b => {
        return b.name.startsWith(val.name) &&
        b.author.startsWith(val.author) &&
        b.release_year.startsWith(val.release_year)
      })
   ))
   .subscribe(books => {
    this.books=books;        
   ))