2016-12-01 75 views
0

我正在嘗試使用'orderBy'過濾器在列表中對列進行排序。我的代碼是這樣的:如何判斷使用orderBy時的值的類型?

JS: retrieving data using $http.get in the controller 
sample Json: 

    $scope.items = [{id:111, name:'AAA', value:120.5}, 
    {id:222, name:'BBB', value:215.2}, 
    {id:333, name:'CCC', value:412.32}, 
    {id:444, name:'DDD', value:852.25}, 
    {id:555, name:'EEE', value:742.2] 

    $scope.sortColumn = "name"; 
    $scope.reverseSort = false; 

    $scope.sortData = function(column){ 
     $scope.reverseSort = ($scope.sortColumn == column) ? !$scope.reverseSort : false; 
     $scope.sortColumn = column; 
    }; 

    $scope.getSortClass = function(column){ 
     if($scope.sortColumn == column){ 
      return $scope.reverseSort ? 'headerSortDown' : 'headerSortUp'; 
     } 
     return 'tableHeader'; 
    }; 

html: 

<table> 
<thead> 
<tr> 
    <td ng-click="sortData('id')" ng-class="getSortClass('id')">id</td> 
    <td ng-click="sortData('name')" ng-class="getSortClass('name')">name</td> 
    <td ng-click="sortData('value')" ng-class="getSortClass('value')">value</td> 
</tr> 
</thead> 
<tbody> 
<tr ng-repeat="item in items | orderBy:sortColumn:reverseSort"> 
    <td>{{item.id | number}}</td> 
    <td>{{item.name}}</td> 
    <td>{{item.value | number}}</td> 
</tr> 
</tbody> 

問題是角取我的值作爲字符串進行排序的目的,然而,「ID」和「值」列類型是「數字」和當我使用' typeof()'函數在瀏覽器控制檯中,它返回'數字'。我嘗試在這兩列中使用'parseFloat'作爲值,然後正確排序。 我爲什麼要解析這些值?我不想在我的js代碼中做額外的循環來完成這些轉換。有沒有人知道這個問題的更好的解決方案?

+1

你能給我們一些你寫的代碼嗎?這可能有很多答案,具體取決於你寫的東西。 – noelmace

+0

所以你說'orderBy:'id''不起作用? –

+0

我用我的代碼示例更新了我的原始問題。 – Nisman

回答

0

您的代碼按預期工作。 orderBy是基於列的類型進行排序的。 檢查這個fiddle我使用你的代碼創建的。它似乎按預期工作。我更改了$ scope.items中的值以避免混淆。

+0

如果您要鏈接到非現場示例,至少還要在您的答案中發佈您的代碼。 –

+0

感謝您的回答。問題是我錯誤的字段名稱傳遞給頭中的sortData()函數。 – Nisman