2016-11-29 120 views
0

我的數據被分類爲一個字符串:

ID   Name 
1122162089 John McGill 
1461  Cynthia Salazar 
22925  Sylvan Knutsen 
24930  Amrit Advani 

我需要將其排序爲數字

var sortedData = function (records,optionsData) { 
    var sortField = optionsData.sort[0].field; 
    var sortDir = optionsData.sort[0].dir !== "asc"; 
    var tempRecords = $filter('orderBy')(records, sortField, sortDir); 

    return tempRecords; 
} 

其中

sortField = "ID" and sortDir = "asc" 

避風港沒有想出如何在控制器中編寫自定義過濾條件

什麼奇怪的是,ID是在數據數值:

[{ 
    ID: 1122162089, 
    Name: "John McGill" 
},{ 
    ID: 1461, 
    Name: "Cynthia Salazar" 
}] 
+0

哪裏是NG-您也可以通過注入orderByFilter到控制器中像這樣的訪問排序依據過濾器重複?在你的文章?做更新以進一步幫助你 – Aravind

+0

沒有ng-repeat。這是**控制器**。這是令我非常沮喪的事情之一 - 每個例子都假設它在虛擬機中。 – DaveC426913

回答

1

由於ID是一個字符串,因此您的數據正在按字符串排序。您可以將自定義比較器添加到$ filter以處理字符串ID。

.controller('MyCtrl', ['$scope', 'orderByFilter', function($scope, orderBy) 

然後你可以使用這樣的orderByFilter到您的數據使用自定義排序比較:

var sortedData = function(records, optionsData) { 
    var sortField = optionsData.sort[0].field; 
    var sortDir = optionsData.sort[0].dir !== "asc"; 

    var tempRecords = orderBy(records, sortField, sortDir, function(val1, val2) { 
     var v1 = parseInt(val1.value); 
     var v2 = parseInt(val2.value); 

     if (v1 === v2) { 
      return 0; 
     } else { 
      return v1 < v2 ? -1 : 1; 
     } 
    }); 

    return tempRecords; 
}; 
+0

謝謝。這是**控制器**解決方案,而不是其他人提供的虛擬機解決方案。 – DaveC426913

-1

在我來說,我使用的OrderBy在表,看看這個例子。你必須在「表達式」中放置你想要的元素,而「反向」是數據將如何顯示,上升或下降,其中真實值爲遞減值,虛​​擬值爲上升值。

<tr ng-repeat="obj in usuarios | orderBy : expression : reverse"> 

</tr> 

如果字符串存在問題,請嘗試使用parseInt()。

+0

編號**控制器**,不是VM。 – DaveC426913