0

Ich habe ein Array von Objekten und ich versuche, sie mit einem booleschen Objektattribut zu sortieren (oder gruppieren) mit Angularjs 'ng-Repeat-Funktionalität.Sortierung eines Arrays von Objekten in ng-repeat mit orderBy

Ich versuchte mit OrderBy und GroupBy, aber keiner von ihnen funktionierte.

hier ist mein html:

<tbody md-body> 
         <tr md-row ng-repeat="item in dashboardCtrl.unAckAlertList | limitTo : 4 | orderBy: 'item.urgent'"> 
          <td md-cell> 
           <i ng-if="item.urgent" class="fa fa-warning" style="font-size:22px;color:red;"></i><i ng-if="!item.urgent" class="fa fa-warning" style="font-size:22px;color:slategray;"></i><span><b> {{item.status}}</b></span> 
          </td> 
          <td md-cell> 
           {{item.MyName}}/{{item.sourceProperty}} 
          </td> 
          <td md-cell> 
           {{item.name}} 
          </td> 

Es funktionierte nie und ich frage mich, warum.

Antwort

1

sollten Sie die folgende Syntax verwenden:

orderBy: 'urgent' 

Hier ist das Zitat aus dem documentation auf string als orderBy Parameter verwendet:

string: An Angular expression. The result of this expression is used to compare elements (for example name to sort by a property called name)...

+0

sein ja, ich dachte, dieser Teil des Problems war zu, aber auch ng-Repeat-Grenze bis 4 vor dem Array Sortierung verursachte das eigentliche Problem. –

1

orderBy für die Eigenschaften sieht man es sagen zu, innerhalb das aktuelle Element aus Ihrem Array.

Im Schnipsel Sie zur Verfügung gestellt, haben Sie das aktuelle Element den Namen item, das ist das, was orderBy in Objekte suchen.

Sie brauchen nicht orderBy: item.urgent zu schreiben. Wenn Sie orderBy: urgent schreiben, sollte Angular in der Lage sein, den Rest herauszufinden.

0

2 Dinge verursacht diesen Fehler:

  1. Array zuerst sortiert werden sollten und dann sollten Sie die Ansicht beschränken.

  2. Unabhängig vom Objektattribut, nach dem Sie sortieren möchten, sollten Sie nur den Attributnamen und nicht das Objekt selbst angeben.

statt:

ng-repeat="item in dashboardCtrl.unAckAlertList | limitTo : 4 | orderBy: 'item.urgent'" 

sollte es

ng-repeat="item in dashboardCtrl.unAckAlertList | orderBy: 'urgent' | limitTo : 4 " 
Verwandte Themen