2016-08-19 2 views
2

Привет, я начинаю в Angular. У меня возникла проблема с использованием сравнения даты с фильтром orderBy. Проблема в том, что фильтр не учитывает месяц и год. Вот фрагменты кода (также доступны на fiddle)orderBy date fltter angular

SCRIPT

var list = [ 
    { 
    name: 'Jon', 
    joining_date:'23/10/2015', 
    age: 23 
    }, { 
    name:'Viki', 
    joining_date:'24/01/2015', 
    age: 20 
    }, { 
    name: 'Abc', 
    joining_date:'25/10/2015', 
    age: 43 
    }, { 
    name: 'XYZ', 
    joining_date:'28/10/2015', 
    age: 21 
    } 
]; 

var empApp = angular.module('emp-list', []); 
empApp.controller('emp-table',function($scope){ 
    $scope.data = list; 
}) 

HTML

<div ng-app="emp-list"> 
    <div class="search-box"> 
    <input type="text" ng-model="searchKeyword"></input> 
    </div> 
    <div ng-controller="emp-table"> 
    <table width="100%"> 
     <tr> 
     <th width="33%">Name</th> 
     <th width="33%">Joining Date</th> 
     <th width="33%">Age</th> 
     </tr> 
     <tr ng-repeat="lists in data | filter: searchKeyword | orderBy : 'joining_date'"> 
     <td>{{lists.name}}</td> 
     <td>{{lists.joining_date}}</td> 
     <td>{{lists.age}}</td> 
     </tr> 
    </table> 
    </div> 
</div> 

РЕЗУЛЬТАТ

Name Joining Date Age 
Jon  23/10/2015  23 
Viki  24/01/2015  20 
Abc  25/10/2015  43 
XYZ  28/10/2015  21 

ответ

1

Это потому, что ваш joining_date является строкой вместо объекта Date. В результате orderBy сравнивает их как строки. Вот ваш фиксированный пример: https://jsfiddle.net/bocn0vrb/1/.

Вы также можете использовать настраиваемую функцию для сравнения этих строк с некоторыми кастами. Взгляните на страницу документации: https://docs.angularjs.org/api/ng/filter/orderBy.

+0

Спасибо вам @smefju его теперь работает нормально – Kamal

+0

@Kamal Нет проблем. Отметьте пост как ответ, если все ясно :) – smefju

0

У меня есть еще одно решение, не изменяя данные json. Пожалуйста, проверьте мой код ниже.

Я только что создал такую ​​функцию, которая преобразует дату из строки в формат дата

$scope.dateFormate = function(joinDate){ 
     return new Date(joinDate) 
    } 

SCRIPT

var list = [{ 
         name: 'Jon', 
         joining_date:'2015-10-23', 
         age: 23 
        }, 
        { 
         name:'Viki', 
         joining_date:'2015-01-24', 
         age: 20 
        }, 
        { 
         name: 'Abc', 
         joining_date:'2015-10-25', 
         age: 43 
        }, 
        { 
         name: 'XYZ', 
         joining_date:'2015-10-21', 
         age: 21 
       }]; 


var empApp = angular.module('emp-list', []); 
empApp.controller('emp-table',function($scope){ 
    $scope.data = list; 

    $scope.dateFormate = function(joinDate){ 
     return new Date(joinDate) 
    } 
})