2016-04-27 18 views
0

Meine Angular 2-Anwendung hat eine Tabelle und ihr Inhalt muss sortiert werden, wenn ich auf die Überschrift klicke. Unten ist mein Code:orderby funktioniert nicht. Showfehler (TypeError: Eigenschaft 'toLowerCase' von undefined in [null] kann nicht gelesen werden)

static _orderByComparator(a: any, b: any): number { 

    if ((isNaN(parseFloat(a)) || !isFinite(a)) || (isNaN(parseFloat(b)) || !isFinite(b))) { 
     //Isn't a number so lowercase the string to properly compare 
     if (a.toLowerCase() < b.toLowerCase()) return -1; 
     if (a.toLowerCase() > b.toLowerCase()) return 1; 
    } 
    else { 
     //Parse strings as numbers to compare properly 
     if (parseFloat(a) < parseFloat(b)) return -1; 
     if (parseFloat(a) > parseFloat(b)) return 1; 
    } 

    return 0; //equal each other 
} 

transform(input: any, [config = '+']): any { 

    if (!Array.isArray(input)) return input; 

    if (!Array.isArray(config) || (Array.isArray(config) && config.length == 1)) { 
     var propertyToCheck: string = !Array.isArray(config) ? config : config[0]; 
     var desc = propertyToCheck.substr(0, 1) == '-'; 

     //Basic array 
     if (!propertyToCheck || propertyToCheck == '-' || propertyToCheck == '+') { 
      return !desc ? input.sort() : input.sort().reverse(); 
     } 
     else { 
      var property: string = propertyToCheck.substr(0, 1) == '+' || propertyToCheck.substr(0, 1) == '-' 
       ? propertyToCheck.substr(1) 
       : propertyToCheck; 

      return input.sort(function (a: any, b: any) { 
       return !desc 
        ? OrderBy._orderByComparator(a[property], b[property]) 
        : -OrderBy._orderByComparator(a[property], b[property]); 
      }); 
     } 
    } 
    else { 
     //Loop over property of the array in order and sort 
     return input.sort(function (a: any, b: any) { 
      for (var i: number = 0; i < config.length; i++) { 
       var desc = config[i].substr(0, 1) == '-'; 
       var property = config[i].substr(0, 1) == '+' || config[i].substr(0, 1) == '-' 
        ? config[i].substr(1) 
        : config[i]; 

       var comparison = !desc 
        ? OrderBy._orderByComparator(a[property], b[property]) 
        : -OrderBy._orderByComparator(a[property], b[property]); 

       //Don't return 0 yet in case of needing to sort by next property 
       if (comparison != 0) return comparison; 
      } 

      return 0; //equal each other 
     }); 
    } 
    } 
} 

ich nach Wert eine Funktion zum Ändern der Reihenfolge erstellt:

fororderbyfn(sortparam: any) { 

    this.fororderby = (this.fororderby == sortparam) ? "-" + sortparam : sortparam;  


} 

und dies ist mein HTML-Code:

<th> 
    <a style="cursor:pointer;" 
     (click)="fororderbyfn('TICKET_NUMBER')">Ticket# 
     <span [hidden]="!reverseSort"> 
     <img src="Style/images/sortup.png" /> 
     </span> 
     <span [hidden]="reverseSort"> 
     <img src="Style/images/sortdown.png" /> 
     </span> 
    </a> 
    </th> 
<tr *ngFor="#Tkt of ticketListData | orderBy : fororderby "> 
+0

Sie können Ihre Frage bearbeiten und den Code dort hinzufügen. Code in Kommentaren ist nicht lesbar –

+0

Was Angular2 Version? –

+0

eckig 2 neueste Beta-Version – Arron

Antwort

0

Yours a und b Variablen sind wahrscheinlich keine Zeichenfolgen. Hatte das gleiche Problem und löste es durch Casting auf String:

if (a + ''.toLowerCase() < b + ''.toLowerCase()) { 
    return -1; 
} 
+0

es ist nicht richtig sortiert..es ist die Sortierung der Großbuchstaben zuerst und dann die kleinen Buchstaben .. – Arron

+0

immer wenn iam geben this.fororderby = "", es steigt die Großbuchstaben zuerst und dann die kleinen Briefe.. – Arron

Verwandte Themen