我有一个世界各国的ng-repeat选择菜单,它们的名字和2个字母的缩写。
我从Angular文档中了解到,您可以在选择菜单option
中ng-repeat
之前对1 {{1}}项进行硬编码
所以,按照预期我用它来表示空值"选择..."菜单项。
其余项目来自JSON源,按国家/地区代码在我的服务中按字母顺序排列。
现在我的客户希望将美国置于菜单的首位,因为它最常被选中(英国版本最高的英国版本)。
如果不重新订购我的JSON文件,我怎样才能实现这一目标?
答案 0 :(得分:1)
您可以在Angular(https://docs.angularjs.org/api/ng/filter/orderBy)
中使用orderBy过滤器因为orderBy只能与谓词函数或表达式一起使用,所以你不能编写自己的比较函数,但是你可以通过返回一个在每个其他函数前面的值来强制首先使用US或UK。
例如,如果每个国家/地区都有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,则可以使用上述比较运算符排序的任何其他属性强制进行排序。