打字稿过滤器成人和儿童

时间:2020-02-16 14:18:44

标签: angular typescript

过滤器无法正常工作。我想用他们的孩子编号过滤大人,并将其包括在记录中。我该如何修复代码?

.html

Curry

.ts

library(functional)
show_stats5 <- function(x) {
  funs <- list(mean = Curry(mean, na.rm = TRUE), 
               sd = Curry(sd, na.rm = TRUE),
               length = length)
  lapply(funs, function(f) f(x))
}

2 个答案:

答案 0 :(得分:1)

只有一个功能,例如:

filterHotels() {
    const filtered = this.hotels.filter(x => x.numberOfAd == this.adult && x.numberOfChd == this.chd);
    this.dsHotels.data = filtered;
}

然后:

<input id="adult" type="number" [(ngModel)]="adult" (ngModelChange)="filterHotels()" />
<input id="child" type="number" max="3" min="0" [(ngModel)]="chd" (ngModelChange)="filterHotels()" />

是的,输入上应该只有一个ngModel,所以删除

[(ngModel)]="childCount"

请参见StackBlitz working example

由于这些值存储在.ts文件的Adult和chd变量中,因此该值始终可供该函数使用,因此无论哪个模型更改触发它,单个函数都可以对这两个值进行过滤。

注意,您也应该也可以将任何其他过滤器变量添加到此函数,并只需从所有输入中调用它即可。

答案 1 :(得分:0)

每个功能都应同时考虑两个过滤器。

changeNumberOfAdults() {
    const filtered = this.hotels.filter(x => {return this.chd == undefined ? x.numberOfAd == this.adult : x.numberOfAd == this.adult && x.numberOfChd == this.chd } );
    this.dsHotels.data = filtered;
}

changeNumberOfChilds() {
    const filtered = this.hotels.filter(x => {return this.adult == undefined ? x.numberOfChd == this.chd : x.numberOfAd == this.adult && x.numberOfChd == this.chd } );
    this.dsHotels.data = filtered; }

此外,这是编写有角度的自定义过滤器Pipe的很好的情况,并且可以避免使用onModelChange