过滤Angular 2中的嵌套数据

时间:2018-05-10 23:37:48

标签: angular typescript filter

我在书籍和类别之间有很多关系,我想按类别过滤书籍。我在这里缺少什么?因为它会返回未经过滤的书籍。

ngOnInit(): void {
this.bookService.getBooks()
  .subscribe(
  books => {
    this.filteredBooks = books.filter(
      book => book.categories.filter(cat => cat.categoryId === this.route.snapshot.params['categoryId']));

    this.route.params.subscribe(params => {
      this.categoryId = params['categoryId'];
      this.updateList();
    });
  });
  }

updateList() {
    if (this.categoryId > 0) {
      this.books = this.filteredBooks;
    }
  }

非常感谢!

1 个答案:

答案 0 :(得分:0)

在我看来,当你的代码那样时,这段代码非常糟糕且充满风险。

首先,您订阅了两次,但由于您以后必须取消订阅,因此不太好。

其次,this.route.snapshot.params['categoryId']很难控制输出。

第三,理解this.categoryId = params['categoryId'];this.route.snapshot.params['categoryId']太难了。它就像重复的代码,不是吗?

所以我的建议是,您可以尝试使用可预测状态容器,例如Redux,以便更好地实施程序。

回到你的问题我猜这个方法的根本原因。你检查过了吗?

updateList() {
    if (this.categoryId > 0) { // maybe this is false ???
      this.books = this.filteredBooks;
    }
}