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