在ng-repeat指令中处理很长的列表.
我有一个搜索框,我想按最接近的匹配进行筛选.
我有一个搜索框,我想按最接近的匹配进行筛选.
例如:
如果我有:
>你好,你好吗?
>你好,你今天过得怎么样?
>你好兄弟
我搜索“你好”
我希望“你好兄弟”首先出现,因为它是远离搜索字符串的最少字符数.
解决方法
如果要使字符数更重要,可以按字符串长度排序.
orderBy: 'string.length'
Here是一个掠夺者的例子.哪个没有多大意义,但证明这是有效的.
以下是您可以做的一个小例子
app.filter('sortByLength',function() { return function(items) { items.sort(function (a,b) { return (a.length > b.length ? 1 : -1); }); return items; }; });
如果你想要,你可以将搜索字符串作为参数引入angularjs上的过滤器外观.更多信息
here.
app.filter('sortByMatch',function() { return function(items,searchString) { var re = new RegExp("[" + searchString + "]","g"); items.sort(function (a,b) { if (!searchString) { return input; } var matchingCharsA = a.length - (a.match(re) || []).length; var matchingCharsB = b.length - (b.match(re) || []).length; return (matchingCharsA > matchingCharsB ? 1 : -1); }); return items; }; });
你可以像这样使用它.
ng-repeat="item in.... | sortByMatch: searchString
我希望这有帮助.