作者:宝丁2502907973 | 来源:互联网 | 2022-12-09 17:15
使用管道过滤数据不被视为"最佳实践".相反,在组件中执行此操作.例如:
// Local filter
performFilter(filterBy: string): IMovie[] {
if (filterBy) {
filterBy = filterBy.toLocaleLowerCase();
return this.movies.filter((movie: IMovie) =>
movie.title.toLocaleLowerCase().indexOf(filterBy) !== -1);
} else {
return this.movies;
}
}
我在这里有一篇关于此的详细博客文章:https://blogs.msmvps.com/deborahk/filtering-in-angular/
它详细说明了不应使用管道进行过滤的原因以及执行上述过滤操作的几种不同技术.
BTW ......这段代码看起来很熟悉.:-)这是我的一个OLD Angular v2会谈的代码......在我们收到团队的通知之前,不建议使用这种方式使用管道.
哦......我在另一个答案中查看了您提供的链接作为评论(此后已被删除),代码与您在上面发布的内容不同.以下是您链接中的"工作"代码:
transform(value: IProduct[], filterBy: string): IProduct[] {
filterBy = filterBy ? filterBy.toLocaleLowerCase() : null;
return filterBy ? value.filter((product: IProduct) =>
product.productName.toLocaleLowerCase().indexOf(filterBy) !== -1) : value;
}
以下是上面的代码:
transform(value: any[], input: string) {
if (input) {
input = input.toLowerCase();
return value.filter(function (el: any[]) { // <---- data type!
return el.toLowerCase().indexOf(input) > -1;
});
}
return value;
}
注意传递给过滤器函数的数据类型是any[]
.它应该是any
.
1> DeborahK..:
使用管道过滤数据不被视为"最佳实践".相反,在组件中执行此操作.例如:
// Local filter
performFilter(filterBy: string): IMovie[] {
if (filterBy) {
filterBy = filterBy.toLocaleLowerCase();
return this.movies.filter((movie: IMovie) =>
movie.title.toLocaleLowerCase().indexOf(filterBy) !== -1);
} else {
return this.movies;
}
}
我在这里有一篇关于此的详细博客文章:https://blogs.msmvps.com/deborahk/filtering-in-angular/
它详细说明了不应使用管道进行过滤的原因以及执行上述过滤操作的几种不同技术.
BTW ......这段代码看起来很熟悉.:-)这是我的一个OLD Angular v2会谈的代码......在我们收到团队的通知之前,不建议使用这种方式使用管道.
哦......我在另一个答案中查看了您提供的链接作为评论(此后已被删除),代码与您在上面发布的内容不同.以下是您链接中的"工作"代码:
transform(value: IProduct[], filterBy: string): IProduct[] {
filterBy = filterBy ? filterBy.toLocaleLowerCase() : null;
return filterBy ? value.filter((product: IProduct) =>
product.productName.toLocaleLowerCase().indexOf(filterBy) !== -1) : value;
}
以下是上面的代码:
transform(value: any[], input: string) {
if (input) {
input = input.toLowerCase();
return value.filter(function (el: any[]) { // <---- data type!
return el.toLowerCase().indexOf(input) > -1;
});
}
return value;
}
注意传递给过滤器函数的数据类型是any[]
.它应该是any
.
我更新了我的帖子,向您展示原始代码(来自该链接)和您当前的代码.您可能删除了错误的[]集.这不是一个`值:任何[]`而是那个是&#39;el:any []`的那个是不正确的.尝试从那个删除`[]`,看看你是否还有错误.