2013-10-15 98 views
0

我想使用Angularjs按字母順序拆分國家/地區列表。 有點像A:美國,澳大利亞B:巴西,不丹... 該名單來自一個名爲國家的表。我試圖在國名的第一個字母表上應用angularjs過濾器,但失敗了。我必須爲它創建一個自定義過濾器嗎?使用Angularjs按字母順序將國家拆分列表

+1

你想在哪裏使用那個?一些帶有下拉列表的文本框? –

+0

像這樣(http://www.infoplease.com/countries.html#ALPHA-A) – firangi

+0

控制器中的數據是什麼樣的?它來自服務嗎?一個jsfiddle或一些代碼顯示你已經嘗試過會有所幫助。 – thebenedict

回答

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}} 

不要讓我知道是否有這樣做沒有更好的辦法...

+0

很好的解決方案,我注意到自定義過濾器內的代碼被執行兩次,雖然 - 這是一個正常的行爲angularjs? –

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); 
    };