使用Angularjs按字母顺序拆分国家/地区列表

时间:2013-10-15 11:15:18

标签: angularjs

我想使用Angularjs按字母顺序拆分国家/地区列表。 有点像A:美国,澳大利亚B:巴西,不丹...... 该列表来自一个名为countries的表。我试图在国家名称的第一个字母表上应用angularjs过滤器,但失败了。我是否必须为其创建自定义过滤器?

3 个答案:

答案 0 :(得分: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}}

如果有更好的方法可以让我知道......

答案 1 :(得分: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 );
  };

答案 2 :(得分:0)

排序项目列表是一个jQuery插件,可以创建类似于Apple设备上的音乐和通讯录应用程序中看到的iOS风格的粘贴标题 检查链接:

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