2017-01-31 4 views
0

Ich versuche eine nach Datum sortierte Akkordeonliste zu zeigen. Dieses Datum ist im JSON-Format, das ist nicht benutzerfreundlich. Wenn ich es aber so formatiere, wie ich es möchte, I verwenden kann es nicht mehr um die Liste zu bestellen.Ordnen nach Datum 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>

Wenn ich die JSON Datum Umwandlung Kommentar-, wird die orderby arbeiten, weil die Reihenfolge der Zahlen für die Bestellung nicht gut ist. Wie kann Ich behalte das formatierte Datum bei der Bestellung mit dem ursprünglichen Datum?

Antwort

1

Haben Sie versucht, ein Angular-Filter für die Formatierung des Datums zu verwenden, wenn Sie es der Accordion-Direktive zuführen? Ihr kommentierten Code oben würde wahrscheinlich eine Filterfunktion sein wie unter (vorausgesetzt, ich Ihre Funktion richtig interpretiert habe):

.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]; 
    } 
}); 

Dann in Ihrem Akkordeon-Markup wird Datum interpoliert werden, wie:

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

Dieser sollte das Datum für andere Operationen (wie die orderBy) allein lassen, während eine formatierte Version für die Anzeige zur Verfügung stellt ...

+0

danke sylonzero, ich bin nicht sehr vertraut mit eckigen Filtern, muss das ändern :) – Lernas

0

Ich habe angularJS Filter nicht zu viel erforscht, also war die Lösung für dieses Problem einfacher als ich dachte .

verließ ich den Controller ohne einen entsprechenden Code

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

und ein Filter aus meiner Sicht verwendet:

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

So:

<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'">