AngularJS自动搜索问题:退格后旧结果重复追加至建议列表
解决AngularJS自动搜索旧结果残留的问题
我来帮你搞定这个自动搜索的小bug!核心问题很简单:每次触发搜索时你没有重置用来存放结果的output数组,导致新的搜索结果直接追加到旧结果后面,退格重新输入时旧内容自然就留在列表里了。
先拆解你代码里的几个问题点:
output数组在每次搜索前没有清空,旧结果持续累积- 你尝试用
output[i].splice(...)删除元素,但用法错误(output是字符串数组,不是对象数组,且索引逻辑完全不对) - 匹配条件
str.indexOf(suggestText) > 0会漏掉搜索文本在标题开头的情况(比如搜"ang"时,"AngularJS"就匹配不到,因为它的index是0)
修正后的代码
// 每次搜索前先清空结果数组,这是解决问题的核心! output = []; for (var i = 0 ; i < $scope.suggestionResults.length ; i++){ var str = $scope.suggestionResults[i].title; // 修改匹配逻辑:只要标题包含搜索文本就算匹配,包括开头的情况 if(str.indexOf(suggestText) !== -1){ output.push($scope.suggestionResults[i].title); } else { console.log(suggestText + 'Not matching'); } } $scope.filterSearch = output; console.log($scope.filterSearch);
关键改进说明
- 强制清空结果数组:在for循环前加上
output = [];,确保每次搜索都是从空数组开始收集新结果,彻底杜绝旧内容残留 - 修正匹配逻辑:把
str.indexOf(suggestText) > 0改成str.indexOf(suggestText) !== -1,覆盖搜索文本在标题任意位置的匹配场景 - 移除无效删除逻辑:因为现在每次都清空数组,不需要再手动删除旧元素,原来错误的splice代码完全可以去掉,避免额外报错
这样修改后,退格重新输入时,旧的搜索结果就不会再出现在自动建议列表里啦!
内容的提问来源于stack exchange,提问作者shabarinath
相关产品推荐
相关产品推荐

