0

我正在顯示樣本員工數據表,並且我需要以姓爲單。該數據是通過以.json文件提供,並且名稱是一個字符串:如何使用分割字符串函數的結果與Angular.js進行排序?

users.json 

{ 
    "id": 5, 
    "name": "Bob Smith", 
    "username": "Eloyn.Skilles", 
    "email": "[email protected]", 
    "address": { 
    "street": "Rox Trial", 
    "suite": "Suite 2890", 
    "city": "Smashmouth", 
    "zipcode": "58604­1099", 
    "geo": { 
     "lat": "27.8718", 
     "lng": "21.8984" 
    } 
    }, 
    "phone": "210.067.6132", 
    "website": "elvis.io", 
    "company": { 
    "name": "Johns Group", 
    "catchPhrase": "Configurable multimedia task­force", 
    "bs": "generate enterprise e­tailers" 
    } 
} 

到目前爲止,我已經能夠分割字符串成兩個:

MainController.js 

/* Function to split strings where there is a space present */ 
$scope.nameSplitter = function(string, index) { 
    $scope.array = string.split(' '); 
    return $scope.result = $scope.array[index]; 
} 

這裏是HTML:

<table class="table table-striped table-bordered table-condensed table-hover"> 
    <th>Name</th> 
    <th>Email</th> 
    <th>Phone</th> 

    <!-- Would like to ideally orderBy last name --> 
    <tr ng-repeat="user in userData | orderBy:'name'"> 
     <td>{{ nameSplitter(user.name,1) }}, {{ nameSplitter(user.name,0) }}</td> <!--0 returns first name, 1 returns last name--> 
     <td><a ng-href="mailto:{{user.email}}" target="_blank">{{user.email}}</a></td> 
     <td><a ng-if="user.phone !== ''" href="tel:{{nameSplitter(user.phone, 0)}}" data-toggle="tooltip" title="{{nameSplitter(user.phone, 0)}}"> 
      <span class="glyphicon glyphicon-earphone"></span></a></td> 
</table> 

我試過這orderBy:'nameSplitter(user.name, 1)'與各種支架組合,但沒有運氣。

+2

您打算如何處理「邊緣情況」單名(Pele),冠名加單名(教皇弗朗西斯),姓氏多部分(Ludwig van Beethoven),多個姓氏(EnriquePeñaNieto),多個名字(Sarah Jessica Parker)等。 ?如果可以的話,您應該考慮重組您的表格以包含首選姓氏,首選姓名,地址的首選形式......取決於您計劃如何使用數據。 – shoover

+0

這是一個很好的觀點。感謝您將此引起我的注意。我正在處理的這個項目中的數據很簡單,幸運的是沒有(也不會)包含邊界情況。 –

回答

2

orderBy也接受函數。

ng-repeat="user in userData | orderBy:getlastname" 

$scope.getlastname = function(user) { 
    var name = user.name.split(' '); 
    return name[1]; 
} 
+0

這對我有效!問題是我不知道如何獲得orderBy接受函數。謝謝! –

0

您可以使用ArrayfunctionorderByAngular orderBy docs

因此,一個attribute name在HTML

<tr ng-repeat="user in userData | orderBy:myCustomOrderBy"> 

,並在控制器

$scope.myCustomOrderBy = function(user){ 
    return user.name.split(' '); //what you intent to here play on your own 
} 

範圍當前用戶作爲傳遞論點

0

orderBy與一個字符串是一個表達式,所以你可以包含函數,或者可以提供一個自定義函數作爲參數而不是字符串。

<tr ng-repeat="user in userData | orderBy:'name.split(\' \')[1]'"> 
+1

你將不得不逃避那些單引號 – Ronnie

相關問題