2017-01-31 6 views
0

Я пытаюсь показать список аккордеона, упорядоченный по дате. Эта дата в формате JSON, которая не является дружественной для пользователя. Однако, если я отформатирую ее так, как я хочу, я больше не может использовать его, чтобы упорядочить список.Сортировать по дате AngularJS (Ionic

.controller('WarningsCtrl', function ($scope, HttpService) { 
 
    HttpService.getWarnings() 
 
    .then(function (res) { 
 
     for (var i = 0; i < res.length; i++){ 
 
      //converts json date (2017-01-25T16:10:45) in simple date (25-01-2017) 
 
      //inicioArray = res[i].inicio.split("-"); 
 
      //inicioArray[2] = inicioArray[2].substring(0, inicioArray[2].indexOf("T")); 
 
      //res[i].inicio = inicioArray[2] + "-" + inicioArray[1] + "-" + inicioArray[0]; 
 
     } 
 
     $scope.warnings = res; 
 
    }, function (err) { 
 
     console.log("Error. " + err); 
 
    }); 
 
    console.log("Warnings: " + $scope.warnings); 
 
})
<ion-item-accordion class="item item-text-wrap" title="{{warning.titulo}}" date="{{warning.inicio}}" icon-align="right" icon-close="ion-chevron-right" icon-open="ion-chevron-down" style="font-size:10px!important; color:red;" ng-repeat="warning in warnings | orderBy:'-inicio'" > 
 
    <div style="text-align:center" ng-if="warning.imagem != null"><img ng-src="http://www.predio24.com/{{warning.imagem}}" style="width:100%; height:auto" /></div><br /> 
 
    <div ng-bind-html="warning.corpo | unsafe"></div> 
 
</ion-item-accordion>

Если я раскомментировать преобразование даты в формате JSON, то OrderBy не будет работать, так как порядок цифр не хорошо для заказа. Как может Я сохраняю сформованную дату при заказе с использованием исходной даты?

ответ

1

Пробовал ли вы использовать фильтр углов для форматирования даты при поставке его в директиву Accordion? Ваш комментарий выше код, вероятно, будет функция фильтра, как показано ниже (при условии, что я интерпретировать вашу функцию справа):

.filter('formatDate', function() { 
    return function(rawDate) { 
     //converts json date (2017-01-25T16:10:45) in simple date (25-01-2017) 
     inicioArray = rawDate.split("-"); 
     inicioArray[2] = inicioArray[2].substring(0, inicioArray[2].indexOf("T")); 
     return inicioArray[2] + "-" + inicioArray[1] + "-" + inicioArray[0]; 
    } 
}); 

Затем в аккордеона разметке, дата будет интерполируются:

date="{{warning.inicio | formatDate}}" 

Это должен оставить дату отдельно для других операций (например, orderBy) при поставке форматированной версии в директиву для отображения ...

+0

поблагодарить вас sylonzero, я не очень знакомый с угловыми фильтрами, нужно изменить это :) – Lernas

0

Я не слишком разбирался в фильтрах angularJS, поэтому решение этой проблемы было проще, чем я думал ,

Я оставил контроллер без соответствующего кода

.controller('WarningsCtrl', function ($scope, HttpService) { 
    HttpService.getWarnings() 
    .then(function (res) { 
     $scope.warnings = res; 
    }, function (err) { 
     console.log("Error. " + err); 
    }); 
    console.log("Warnings: " + $scope.warnings); 
}) 

И использовал фильтр, на мой взгляд:

date="{{warning.inicio | date: 'dd/MM/yyyy' }}" 

Итак:

<ion-item-accordion class="item item-text-wrap" title="{{warning.titulo}}" date="{{warning.inicio | date: 'dd/MM/yyyy' }}" icon-align="right" icon-close="ion-chevron-right" icon-open="ion-chevron-down" style="font-size:10px!important; color:red;" ng-repeat="warning in warnings | orderBy:'-inicio'">