2017-04-20 4 views
0

Ich versuche, eine generische Komponente (in diesem Fall, um ein Array zu sortieren), die nicht im Voraus den Typ der Elemente zu sortieren. Es könnte das Element direkt sein, wenn es eine Zeichenfolge ist, ein Parameter, wenn es ein Objekt ist, ein Parameter eines Parameters usw.Angular2 Ausdruck Auswertung innerhalb einer Komponente

Um dies zu tun, müsste ich den Ausdruck angeben, der aus der übergeordneten Komponente sortiert werden soll.

Zum Beispiel in der Komponente:

array.sort((a: any, b: any): number => { 
     return a.[this.orderBy] > b.[this.orderBy] ? 1 : -1; 
     }); 

Wo orderBy einen Eingang ist wie folgt: ‚name‘ oder ‚object.name‘

Grundsätzlich würde Ich mag die gleiche Art von Ausdrucksauswertung tun das ist in der HTML-Vorlage ({{'..'}}) möglich, aber in einer Typescript-Methode.

Ist es möglich?

+0

Vorlage einige Variablen innerhalb der Vorlage dann machen Sie die Daten verfügbar –

+0

Ich bin mir nicht sicher, was Sie meinen, schlagen Sie eine Kopie des Arrays vor, nur die Elemente durch den Ausdruck gefiltert? Leider kann ich das nicht tun Ich muss das Array direkt sortieren – user7896230

Antwort

0

unten versuchen,

sort(){ 
    let orderBy = "var1.var2"; 
    // orderBy = "name"; 
    let someArray = [{name: 'c', var1 : { var2 : 0}},{name: 'b', var1 : { var2 : 1 }}] 
    let result = someArray.sort((a: any, b: any): number => { 
     return this.resolve(a,orderBy) > this.resolve(b,orderBy) ? 1 : -1; 
     }); 
    console.log(result); 
    } 

resolve(obj, path){ 
    path = path.split('.'); 
    var current = obj; 
    while(path.length) { 
     if(typeof current !== 'object') return undefined; 
     current = current[path.shift()]; 
    } 
    return current; 
    } 

Die einzige Gotcha in oben ist Ihre Objekte Eigenschaftsnamen kein dot(.), wie { 'first.name' : 'c', var1 : { var2 : 0}} enthalten sollte, auch müssen Sie Rand Fällen überlegen, was, wenn Pfad nicht vorhanden ist, sonst sollte man gut sein.

Überprüfen Sie diese Plunker.

Hoffe das hilft !!

+0

Awesome! Es klappt! Ich wusste nichts von Schicht, danke für den Tipp! – user7896230

+0

Ich bin froh, dass ich helfen konnte, Cheers !! –

Verwandte Themen