2017-10-23 1 views
0

Derzeit habe ich die benutzerdefinierte Funktion erstellt, um die fromNow aus dem Moment zu finden, und ich möchte die Daten basierend auf den Wert von der Funktion zurückgegeben werden.AngularJS orderBy arbeitet nicht mit benutzerdefinierten Funktion

Ich mag das Table Element an der Spitze setzen, für die Tage ab jetzt ist weniger

In der unten stehenden Tabelle 31 Tage ab heute in der 2. Säule ist weniger, und ich will dieses Element setzen an der Spitze, habe ich unten Art und Weise versucht, aber es funktioniert nicht

Kann mir jemand Tabelle helfen

Table Demo

AngularJS SortiertNach

<tr ng-repeat="x in Holidays|orderBy:findFromNow"> 
       <td>{{$index+1}}</td> 
       <td>{{x.Day}}</td> 
       <td> 
       <span class="label label-warning">{{findFromNow(x.Date)}} Days From Today</span></td> 
       </tr> 

Funktion

$scope.findFromNow = function (inputDate) { 
     var m = moment(inputDate, "D-MMM-YY"); 
     var today = moment().startOf('day'); 
     var days = Math.round((today - m)/86400000); 
     if (days > 0) { 
      return 999; 
     } else { 
      return (days * (-1)); 
     } 

    } 

Urlaub JSON

[ 
    { 
     "Day": "Monday", 
     "Date": "2-Jan-17" 
    }, 
    { 
     "Day": "Monday", 
     "Date": "20-Feb-17" 
    }, 
    { 
     "Day": "Monday", 
     "Date": "29-May-17" 
    }, 
    { 
     "Day": "Monday", 
     "Date": "3-Jul-17" 
    }, 
    { 
     "Day": "Tuesday", 
     "Date": "4-Jul-17" 
    }, 
    { 
     "Day": "Monday", 
     "Date": "4-Sep-17" 
    }, 
    { 
     "Day": "Thursday", 
     "Date": "23-Nov-17" 
    }, 
    { 
     "Day": "Friday", 
     "Date": "24-Nov-17" 
    }, 
    { 
     "Day": "Monday", 
     "Date": "25-Dec-17" 
    } 
    ] 
+0

Ich benutze keine Angular, aber ich würde eine benutzerdefinierte Sortierung Komparator erwarten zwei Argumente nehmen ähnlich wie bei Verwendung eines Standardarrays '.sort()'. – nnnnnn

+0

Können Sie Ferien-Array bereitstellen? – Akashii

+0

@Akashii Ich habe die Frage mit allen Details aktualisiert. – Batman

Antwort

2

Sie sollten separate Funktion schreiben, oder die Art der Inputdate vor der Verwendung Moment überprüfen, weil in orderBy, Eingabedatum ist Objekt nicht Datum

$scope.sortDate = function(inputDate){ 
    var m = moment(inputDate.Date, "D-MMM-YY"); 
    var today = moment().startOf('day'); 
    var days = Math.round((today - m)/86400000); 
    if (days > 0) { 
     return 999; 
    } else { 
     return (days * (-1)); 
    } 

} 

Hier ist plnkr:

http://plnkr.co/edit/afgsPDBF5RXG5WviYrdU?p=preview

Hoffe, dass es helfen

+0

Danke Es hat funktioniert !! – Batman

Verwandte Themen