我有一个ng-repeat选择菜单,其中包含世界各国,其名称和2个字母的缩写。
我从Angular文档中知道,您可以在选择菜单(https://code.angularjs.org/1.2.26/docs/api/ng/directive/select)option
之前对1个项目进行硬编码ng-repeat
因此,按预期,我将其用于空值“ Choose ...”菜单项。
其余项目来自JSON来源,在我的服务中按国家/地区代码按字母顺序排列。
现在,我的客户希望将美国放在菜单的顶部,因为它是最常被选择的(并且是英国版本,顶部是UK)。
在不重新排序JSON文件的情况下,我如何才能做到这一点?
您可以在Angular中使用orderBy过滤器(https://docs.angularjs.org/api/ng/filter/orderBy)
由于orderBy只能与谓词函数或表达式一起使用,因此您不能编写自己的比较函数,但是可以通过返回将位于其他所有字符前面的值来强制使用美国或英国。
例如,如果每个国家/地区都有一个ID,而您拥有类似阿富汗(ID = 1),阿尔巴尼亚(ID = 2)...和美国(ID = 200)之类的谓词,则谓词可能如下所示:
$scope.predicate = function (country) {
if (country.Name == 'United States') return -1;
else return country.ID;
}
然后像这样在ng-repeat中使用谓词
ng-repeat="country in countries | orderBy:predicate"
之所以有效,是因为(根据文档)
该函数的结果将使用<,=,>运算符进行排序。
如果您没有ID,则可以使用通过上述比较运算符排序的任何其他属性来强制排序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句