2016-05-21 8 views
3

Ich arbeite mit Angular im Frontend und ich versuche herauszufinden, wie man einen Filter macht, um am Ende die Ergebnisse mit 2 Eigenschaften in Null zu setzen. Könnte die eine oder andere Eigenschaft sein.Wie mache ich einen Filter, um am Ende die Ergebnisse mit einer Null-Eigenschaft zu setzen?

Zum Beispiel:

<div ng-repeat="show in shows | filter:query | orderBy:'rating':true"> 
     <a href="/shows/{{show._id}}"> 
     <img ng-src="{{show.poster}}" width="100%"/> 
     </a> 
     <div> 
     <a href="/shows/{{show._id}}">{{show.name}}</a> 
     <p> 
      Episodes: {{show.episodes.length}} <br> 
      <span>Rating: {{show.rating}}</span> 
     </p> 
     </div> 
    </div> 

Was ich in der HTML tue, nach Bewertung ist die Bestellung wie Sie sehen können. Das Problem ist, dass, wenn die Eigenschaft ratingnull kommt, dann wird dieses Element an der Spitze der Ergebnisse sein, und dann kommen die Elemente mit der höchsten Bewertung in der Liste, wie ich will.

Dies ist das Objekt Ich erhalte:

{ 
    "_id": 310243, 
    "name": "Five Star Babies: Inside the Portland Hospital", 
    "airsDayOfWeek": "Wednesday", 
    "airsTime": "21:00", 
    "firstAired": "2016-04-13T00:00:00.000Z", 
    "network": "BBC Two", 
    "overview": "An exclusive glimpse inside the UK's only private maternity hospital.\r\n", 
    "rating": null, // THIS PROPERTY COMES NULL 
    "ratingCount": 0, 
    "status": "Continuing", 
    "poster": "/someImage/path", 
    "subscribers": [] 
} 

Das Objekt kommt von hier:

$scope.shows = Show.query(); 

und dass $scope.shows gibt diese:

[ 
    { 
    "_id": 73787, 
    "name": "That '70s Show", 
    "airsDayOfWeek": "Thursday", 
    "airsTime": "8:00 PM", 
    "firstAired": "1998-08-23T00:00:00.000Z", 
    "network": "FOX (US)", 
    "overview": "Set in the Wisconsin suburbs...", 
    "rating": null, // PROPERTY NULL 
    "ratingCount": 87, 
    "status": "Ended" 
    "poster": "/some/Img/Path" 
    }, 
    { 
    "_id": 35345, 
    "name": "Friends", 
    "airsDayOfWeek": "Thursday", 
    "airsTime": "8:00 PM", 
    "firstAired": "1998-08-23T00:00:00.000Z", 
    "network": "FOX (US)", 
    "overview": "New York TV Show...", 
    "rating": 9.1, 
    "ratingCount": 87, 
    "status": "Ended" 
    "poster": null // PROPERTY NULL 
    } 
] 

, dass das Objekt der Weg, kommt, und diejenigen die 2 Eigenschaften, die ich am Ende der Ergebnisse für den Fall setzen muss th Sie kommen null, rating oder poster.

TL; DR:

SortiertNach Funktion, die Irgendwelche Vorschläge null

an der Spitze der Ergebnisse der Elemente mit den höchsten Ratings, und am Ende die Elemente mit rating oder poster === bringt?

+1

Entweder passen Sie die Daten oder verwenden Sie einen benutzerdefinierten Filter – charlietfl

+0

@charlietfl, wie die Daten angepasst werden, ist das von einer API kommt? – TheUnnamed

+0

Kann die Daten über die Daten durchlaufen, wenn Sie sie empfangen, und "null" in "0" ändern, damit sie richtig sortiert wird. Nicht ungewöhnlich, um Daten zu manipulieren, um besser zu Ihrer App passen – charlietfl

Antwort

1

Sie können Ihre eigene benutzerdefinierte orderBy-Funktion schreiben, die einen Wert zurückgibt. Zum Beispiel:

$scope.order = function(show) { 
    if (show.rating == null || show.poster == null) return 0; 
    return show.rating; 
} 

HTML

<div ng-repeat="show in shows | filter:query | orderBy:order:true"> 

Sample pen.

+0

mmm das tut nichts – TheUnnamed

+0

Interessant, lassen Sie mich einen Blick darauf werfen. –

+0

Nun, es funktioniert definitiv, aber ich habe die umgekehrte Option weggelassen. Es sollte 'orderBy: order: true' lauten, ich bearbeite meine Antwort. Bearbeiten: fügte auch einen Beispielstift hinzu. –

Verwandte Themen