对Angular内置过滤器的结果进行加权排序的最有效方法是什么?
学习Angular时我们遇到的第一课是根据文本框的内容过滤ng-repeat列表:
<input type="text" ng-model="textFilter" />
<ul>
<li ng-repeat="band in favoriteBands | filter:textFilter">
{{ band.name }} ({{ band.singer }}, {{ band.guitar }}, {{ band.etc }})
<li>
</ul>
在这种情况下,在文本框中输入“Hendrix”可以匹配Jimi Hendrix的吉他场和Jimi Hendrix Experience的乐队名称。在这种情况下,我希望band.name上的所有匹配排序到顶部。 band.guitar上的匹配应该接下来,但两者的匹配应该是最顶层的。
设置orderBy
执行此操作的最佳方法是什么?我应该编写一个函数来检查每条记录中的每个字段以查找匹配并指定加权相关性分数吗?这似乎我正在重新进行过滤器工作,但我还没有找到更好的方法。有更好的方法吗?
编辑:为了澄清,这个问题不是关于是否有条件地显示结果,而是关于对通过过滤器的项目进行排序。我想给每个对象中的字段赋予不同的权重。让我们说band.name的权重为5,band.guitarist的权重为2,其他字段的权重为1.如果我搜索“Tom Petty”,我会得到总共8个Tom Petty和Heartbreakers - 5为band.name,1为Tom Petty in band.singer,2为Tom Petty in band.guitar。对于旅行Wilburies,我只得到3(band.singer为1,band.guitar为2)。然后我可以使用这些分数来确定排序。您可以使用任意数量的排序算法 - 这只是一个示例。