/ / Sortowanie ng-repeat z zamiennikiem alternatywnym - angularjs, sorting, angle-directive

Sortowanie ng-repeat z alternatywnym porządkiem - angularjs, sorting, angle-directive

Próbuję sortować listę klientów za pomocą polecenia ng-repeatw Angular, tak aby kolumna z ocenami "Hot", "Warm" i "Cold" przedstawiona w tej kolejności. Obecnie, gdy sortuje kolumnę Ocena, umieszcza je w porządku alfabetycznym "Zimny", "Gorący" i "Ciepły". Jak mam to uporządkować w taki sposób, aby nie było to alfabetycznie? Czy jest to coś z użyciem niestandardowej dyrektywy do stworzenia niestandardowego atrybutu związanego z wartością oceny, a następnie użycia "śledzenia według"?

Oto CodePen z działającym przykładem tego, jak sortuje alfabetycznie:

http://codepen.io/MattSchultz/pen/VeBpaQ

<li id="listCont" ng-repeat="client in clients | orderBy:col:reverse as results" ng-class-even=""even"">
<ul class="clients">
<li>{{client.Name}}</li>
<li>{{client.AnnualRevenue | currency}}</li>
<li ng-class="classy("{{client.Rating}}")">{{client.Rating}}</li>
</ul>
</li>

Odpowiedzi:

3 dla odpowiedzi № 1

Jeśli przekazujesz ciąg (tj. Nazwę właściwości obiektu) jako pierwszy argument do orderBy filter, jak to robisz w swoim przykładzie, spróbuje posortować alfabetycznie. Aby zmienić to zachowanie, należy zamiast tego przekazać funkcję sortowania niestandardowego.

Na przykład:

function ratingSort(val) {
return ["Cold", "Warm", "Hot"].indexOf(val.Rating);
};

Ta funkcja zwraca liczbę pomiędzy -1 (tj. val.Rating wartość nie znajduje się w tablicy) i 2 (tj. "Hot", która jest w indeksie 2 w tablicy). Zwrócona liczba służy do określenia kolejności sortowania.

Oto działający przykład: CodePen