2016-07-20 14 views
2

Ich bin neu in Angular und ich versuche immer noch, um meinen Kopf herum, was möglich ist, so kann dies eine Frage mit einer offensichtlichen Antwort sein, aber ich kann keine relevanten Antworten finden online.Vermeiden Sie Angular.js orderBy Standardsortierung

Ich habe eine switch statement, die entscheidet, welcher Wert an orderBy zurückgegeben wird, und orderBy Ordnet korrekt eine Liste von Objekten entsprechend dem zurückgegebenen Wert. Ich möchte jedoch den default Fall meiner switch statement sicherstellen, dass orderBy nichts in der Reihenfolge der Liste der Objekte tut.

Es scheint jedoch, dass orderBy Standard-Funktionalität hat, die die Liste einen eigenen Weg bestellt, wenn Sie es keinen Wert geben.

Ich habe verschiedene Wege versucht, es an die Arbeit:

default: return; kehrt nichts und orderBy verwendet seine Standardreihenfolge.

default:break; kehrt nichts und orderBy verwendet seine Standard Bestellung

default: return []; und return [''] Ich dachte, ein leeres Array als Argument erkannt werden würde und dies umgehen, aber es nutzt noch die Standard-Bestellung.

default: return [':false']; Ich dachte, die Übergabe eines Wertes in (reverse: false) würde die Standardreihenfolge überschreiben, aber ich bekomme einen Fehler dafür.

Ich habe es auch eingerichtet, orderBy: $index track by $index zu verwenden - ich dachte, es würde nur nach dem ursprünglichen Index des Arrays bestellen. Das hat nicht funktioniert.

Kennt jemand ein Argument, das ich in orderBy passieren kann, um es gar nichts zu einer Liste zu tun zu bekommen, oder wie kann ich die Standard-Sortierung außer Kraft setzen.

+1

Sie müssen explizit gesetzt Ihr Prädikat 'null'. Alle anderen Szenarien, die Sie vorgestellt haben, wären entweder fehlerhaft oder würden den Standard von '+' auslösen. – Claies

+1

nicht durch orderBy ist die Antwort - 'ng-repeat =" x in (willToOrder? (Array | orderBy): Array) "' – YOU

+0

@YOU, das für mich arbeitete, vielen Dank. Wenn Sie Ihren Kommentar zu einer Antwort machen wollen, kann ich sie akzeptieren. – AnonyMouse

Antwort

1

von nicht orderBy Auslösung ist der einzige Weg für die Zeit.

z.

ng-repeat="x in (wantToOrder ? (array | orderBy) : array)"

+1

Danke. Am Ende habe ich es so angewendet: 'data-ng-repeat-start =" item in (getSortingCriteria() == null? Items: (items | orderBy: getSortingCriteria())) ' – AnonyMouse

1

Sie den orderBy Eigenschaftswert auf null setzen müssen.

propertyName = null in JS

oder

ng-repeat="friend in friends | orderBy:null" in HTML

Die docs dies nicht direkt erwähnt, aber es ist ein Beispiel, das durch Ersetzen der Eigenschaft String in eine Ebene null Sortierung deaktiviert.

<button ng-click="propertyName = null; reverse = false">Set to unsorted</button> 
    <hr/> 
    <table class="friends"> 
    <tr> 
     <th> 
     <button ng-click="sortBy('name')">Name</button> 
     <span class="sortorder" ng-show="propertyName === 'name'" ng-class="{reverse: reverse}"></span> 
     </th> 
     <th> 
     <button ng-click="sortBy('phone')">Phone Number</button> 
     <span class="sortorder" ng-show="propertyName === 'phone'" ng-class="{reverse: reverse}"></span> 
     </th> 
     <th> 
     <button ng-click="sortBy('age')">Age</button> 
     <span class="sortorder" ng-show="propertyName === 'age'" ng-class="{reverse: reverse}"></span> 
     </th> 
    </tr> 
    <tr ng-repeat="friend in friends | orderBy:propertyName:reverse"> 
     <td>{{friend.name}}</td> 
     <td>{{friend.phone}}</td> 
     <td>{{friend.age}}</td> 
    </tr> 
    </table> 

orderBy docs

the example plunker

+0

Danke für Ihre Hilfe! Aus irgendeinem Grund funktioniert das nicht für mich, aber mein Code ist ganz anders als das Beispiel in dieser Antwort. – AnonyMouse

+0

Deshalb wird dringend empfohlen, Codebeispiele für Ihre Fragen bereitzustellen. und Winkelversion – svarog