0

我想使用 Angularjs 按字母顺序拆分国家/地区列表。有点像 A : America , Australia B: Brazil, Bhutan ... 该列表来自一个名为 countries 的表。我尝试在国家名称的第一个字母上应用 angularjs 过滤器,但失败了。我必须为它创建一个自定义过滤器吗?

4

3 回答 3

2

好的,我要回答我自己的问题,终于让它工作了。我从 postgres 数据库中提取了一个国家列表,格式如下:

{"alpha2":"ao","alpha3":"ago","numeric":"024","country":"Angola"}

我想按字母顺序拆分国家列表,如下所示:

[示例] http://infoplease.com/countries.html#ALPHA-A

我终于通过编写自定义过滤器让它工作了:

angular.module('countryFilter', []).filter('cfilter', function() {
return function(input,x) {
var groups = [];
for(var i = 0; i < input.length; i++) {
if (input[i].country.substring(0,1) == x)
groups.push(input[i]);
} return groups; }
});

并将其用作:

ng-repeat="data in countries | cfilter:'A'
{{data.country}}

请让我知道是否有更好的方法来做到这一点......

于 2013-10-16T05:59:17.693 回答
1

这是不使用过滤器的另一种可能的解决方案 http://www.bennadel.com/blog/2456-Grouping-Nested-ngRepeat-Lists-In-AngularJS.htm

他创建了一个带有标签和数据的新数组。优点是在模板中您不必命名所有可能的字母。

对于我自己,我从对象中取出客户的第一个字母并将其存储在标签中。这样,我只能得到我使用的字母。

在客户中,我存储了一个包含对象的数组。

for(var i = 0; i < customers.length; i++){

    var customer = customers[i];


    if(customer[ 'title' ].substring(0,1) !== groupValue){

      var group = {
        label : customer[ 'title' ].substring(0,1),
        customers : []

      };

      groupValue = customer.title.substring(0,1);
      groups.push( group );

    };


    group.customers.push( customer );
  };
于 2014-02-25T13:04:59.620 回答
0

Sort Item List 是一个 jQuery 插件,它创建类似于在 Apple 设备上的音乐和联系人应用程序中看到的 iOS 风格的粘性标题检查链接:

http://www.codingprogrammer.com/tutorialdemo/jquery-tutorial/sort-items-alphabetically-jquery-2/

于 2014-05-03T11:40:46.507 回答