在我的项目中,我们显示了一个巨大的字符串列表(有时是17,000+)有一个输入框,用于使用过滤器对列表进行配对。我一直在使用角度的默认过滤器,直到请求我排序,以便从搜索查询开始的字符串出现在仅包含它的单词之前。
说我有一个字符串数组
$scope.array = ["aaa","abb","abc","bad","bcd","cool","cold"]
现在,如果我使用query string 'c'
进行过滤,则会按顺序显示'abc','bcd,'cool','cold'
。但是,当大多数人开始使用' c'他们可能希望看到“酷”#39;和'冷''首先出现。我希望数组为'cool','cold','abc',bcd
(如果按字母顺序排序是包的一部分,可能会冷却然后很酷)我对编写自己的过滤器持谨慎态度,因为我宁愿使用经过验证的真实内容拥有如此庞大的数据集合。
有没有办法在不编写我自己的自定义过滤器的情况下实现这一目标?
似乎普通的功能应该有它的配置,或者可能是我可以从github获取的常见过滤器?
答案 0 :(得分:1)
我认为使用angular orderBy和一个函数来检查字符串是否以C开头并返回正确的asc值它会做你需要的。问题是它在按起始字符排序后会做什么,它是否会返回数组的当前常规,不知道这对你是否重要。
有些伪:
$scope.vm.filter = 'c'
$scope.orderByStartsWith = function(item) {
return item.startsWith($scope.vm.filter) ? 0 : 1;
}
<li ng-repeat="item in array | filter:vm.filter | orderBy:orderByStartsWith" >{{item}}</li>
我希望angular允许你通过函数将更多参数传递给顺序。