我可以配置默认的 angular 过滤器来显示字符串,以便以搜索词开头的字符串排在第一位吗?
Can I configure the default angular filter to display strings so that those that start with the search term come first?
在我的项目中,我们显示了一个巨大的字符串列表(有时超过 17,000 个),并带有一个输入框,用于使用过滤器对列表进行配对。我一直在使用 angular 的默认过滤器,直到有人要求我进行排序,以便以搜索查询开头的字符串排在仅包含它的单词之前。
假设我有一个字符串数组
$scope.array = ["aaa","abb","abc","bad","bcd","cool","cold"]
现在,如果我使用 query string 'c'
进行过滤,将按此顺序显示 'abc','bcd,'cool','cold'
。但是,当大多数人开始使用 'c' 进行搜索时,他们可能希望首先看到 'cool' 和 'cold'。我希望数组是 'cool','cold','abc',bcd
(或者如果按字母顺序排序是包的一部分,则可能是冷的然后很酷)我对编写自己的过滤器持谨慎态度,因为我宁愿使用如此大的尝试和真实的东西收集数据。
有没有办法在不编写我自己的自定义过滤器的情况下实现这一点?
这似乎是足够常见的功能,应该有一个配置或者可能是一个我可以从 github?
中获取的通用过滤器
我认为将 angular orderBy 与检查字符串是否以 C 开头和 returns 是否正确的 asc 值的函数一起使用,它将满足您的需要。问题是它按起始字符排序后会做什么,return 数组的当前序数,不知道这对你是否重要。
有些伪:
$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 允许您按功能将更多参数传递给订单。
在我的项目中,我们显示了一个巨大的字符串列表(有时超过 17,000 个),并带有一个输入框,用于使用过滤器对列表进行配对。我一直在使用 angular 的默认过滤器,直到有人要求我进行排序,以便以搜索查询开头的字符串排在仅包含它的单词之前。
假设我有一个字符串数组
$scope.array = ["aaa","abb","abc","bad","bcd","cool","cold"]
现在,如果我使用 query string 'c'
进行过滤,将按此顺序显示 'abc','bcd,'cool','cold'
。但是,当大多数人开始使用 'c' 进行搜索时,他们可能希望首先看到 'cool' 和 'cold'。我希望数组是 'cool','cold','abc',bcd
(或者如果按字母顺序排序是包的一部分,则可能是冷的然后很酷)我对编写自己的过滤器持谨慎态度,因为我宁愿使用如此大的尝试和真实的东西收集数据。
有没有办法在不编写我自己的自定义过滤器的情况下实现这一点?
这似乎是足够常见的功能,应该有一个配置或者可能是一个我可以从 github?
中获取的通用过滤器我认为将 angular orderBy 与检查字符串是否以 C 开头和 returns 是否正确的 asc 值的函数一起使用,它将满足您的需要。问题是它按起始字符排序后会做什么,return 数组的当前序数,不知道这对你是否重要。
有些伪:
$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 允许您按功能将更多参数传递给订单。