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;
))
我有一个 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;
))