2013-10-31 49 views
10

簡單question-如果我有這個在我的控制器:拆分ng重複項目?

$scope.somedata = 'Item 1, Item 2'; // set from something else 

有沒有辦法分裂somedata我的觀點在ngRepeat表達?喜歡的東西:

<div ng-repeat="item in somedata | split(',')">{{item}}</div> 

這不工作...

還是我必須做

$scope.somedata = 'Item 1, Item 2'; // set from something else 
$scope.items = somedata.split(','); 

然後

<div ng-repeat="item in items>{{item}}</div> 

我想我真的不理解我可以在AngularJS的表達式中做什麼。

回答

15

字符串的|的右側被解析爲一個過濾器(通常它們被串格式化過濾器的名稱,但角隊也提供了filter濾波器,它返回一個過濾陣列(有點誤導,因爲兩個共享同一個名字),你可以創建自己的拆分過濾器來完成你想要的東西:

angular.module('myFilters', []). 
    filter('split', function() { 
    return function(input, delimiter) { 
     var delimiter = delimiter || ','; 

     return input.split(delimiter); 
    } 
    }); 

您可以使用過濾器,像這樣:

<div ng-repeat="item in somedata | split"> 

或指定一個分隔符:

<div ng-repeat="item in somedata | split:,"> 

考慮上面的僞代碼,因爲我沒有測試過它。

樂plunker:http://plnkr.co/edit/hk6F0Y6p5YAXv6fyXfSz?p=preview

+0

這是一個很好的解釋,謝謝! – Nicros

26

我想我太晚了, 但爲什麼不能簡單地這樣做:

<div ng-repeat="item in somedata.split(',')">{{item}}</div> 

的作品就好了。

JSBin作爲證據!

+2

這個答案更容易解決問題;我認爲定義一個過濾器會更容易,但最終這是一個更好的解決方案。不知道它是否是「角度」做事的方式,但是我喜歡它。 – Eolis

+0

這是最好的 –

+0

最簡單的解決方案!這應該是正確的答案 – rh0x

0

註釋分隔符這裏

angular.module('myFilters', []). 
    filter('split', function() { 
    return function(input, delimiter) { 
     //var delimiter = delimiter || ','; 

     return input.split(delimiter); 
    } 
    }); 

您可以使用過濾器,像這樣: 還增加了軌道由$指數,避免因碰撞重複值

<div ng-repeat="item in somedata | split:',' track by $index">