为什么Ionic 4搜索栏删除输入内容后列表无法更新?
问题根因
你当前代码的核心问题是每次过滤时直接覆盖了存储原始全量数据的carGroups数组,首次过滤后原始全量数据就永久丢失了,清空搜索词时无法恢复完整列表。
修复步骤
- 新增变量持久化存储原始全量数据
在ListViewPage类的属性定义部分新增一行,专门用来存储接口返回的所有车辆分组数据,后续过滤操作都不会修改这个变量的值:
allCarGroups: CarGroup[] = [];
- 修改接口请求的赋值逻辑
调整ngOnInit中接口请求的回调逻辑,把返回的全量数据同时赋值给原始数据存储变量和页面渲染用的列表变量:
this.listClientService.getAllCarGroupNamesWithId().subscribe( (response) => { this.allCarGroups = response; this.carGroups = [...response]; return response; });
- 调整过滤逻辑,从原始全量数据中筛选
修改filterItems方法,所有过滤操作都从没有被修改过的allCarGroups中筛选,搜索词为空时直接返回全量数据:
filterItems(searchTerm: string) { // 搜索词为空时直接返回全量数据 if (!searchTerm || searchTerm.trim() === '') { return [...this.allCarGroups]; } return this.allCarGroups.filter(item => item.carGroupName.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1); }
额外规范修正
你当前代码把@Pipe装饰器和@Component装饰器加在了同一个类上,不符合Angular的开发规范,Pipe应该单独声明为独立的类,否则可能引发未知的运行异常,建议把排序用的orderByCarGroupName管道拆分到单独的文件中声明,再在对应模块中引入注册。
内容的提问来源于stack exchange,提问作者Doncarlito87
相关产品推荐
相关产品推荐

