Angular JS从数据中选择菜单,将1项保留在最顶层?

时间:2014-12-10 13:01:45

标签: javascript json angularjs forms

我有一个世界各国的ng-repeat选择菜单,它们的名字和2个字母的缩写。

我从Angular文档中了解到,您可以在选择菜单optionng-repeat之前对1 {{1}}项进行硬编码

所以,按照预期我用它来表示空值"选择..."菜单项。

其余项目来自JSON源,按国家/地区代码在我的服务中按字母顺序排列。

现在我的客户希望将美国置于菜单的首位,因为它最常被选中(英国版本最高的英国版本)。

如果不重新订购我的JSON文件,我怎样才能实现这一目标?

1 个答案:

答案 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,则可以使用上述比较运算符排序的任何其他属性强制进行排序。