2016-06-07 6 views
2

Ich lerne AngularJS und ich habe eine kleine Frage:AngularJS Nachbestellung Ergebnisse ng wiederholen, basierend auf bestimmte Array

Ich habe das folgende Array von Benutzern zurückgegeben

userPreferences = [7,5,4] 

Ich habe ein Objekt, das ich m ng-repeat mit alle News angezeigt werden und sieht wie folgt aus:

{ 
    "id": 1, 
    "preferences": [ 
     3, 
     4 
    ] 
} 

Also, ich möchte in meiner ng-repeat verwenden, das Array von Benutzereinstellungen zurück und sortieren die Nachrichten die Präferenzen Tannen Anzeige t, dann unter den anderen Nachrichten, ist das möglich?

Etwas wie:

<li ng-repeat="new in news | filter:{'userPreferences' : new.preferences}"> 

Ich weiß nicht wirklich, wenn ich Filter, orderBy zu verwenden oder zu sortieren, jede mögliche Hilfe bitte?

+0

Also, wenn 'new.preferences' Array ** alle ** die Elemente der' userPreferences', möchten Sie ihnen zeigen, ist es? – Chinni

+0

Ja, aber wie, new.preferences hat Kategorie 3 und 4, und userPreferences hat 3, dieses neue wird zuerst und alle anderen darunter angezeigt. like, sortiere nach Relevanz ich denke –

+0

Sie wollen auch alle neuen anzeigen, die nicht mit den Benutzereinstellungen übereinstimmen? – Chinni

Antwort

1

Sie können Ihre eigene Funktion haben, die die Anzahl der angepassten preferences auf Ihrem Umfang zurückgibt:

function intersect(array1, array2) { 
    return $filter('filter')(array1, function(n){ 
    return array2.indexOf(n) != -1; 
    }); 
} 

$scope.matchedPreferences = function(n) { 
    return intersect(n.preferences, $scope.userPreferences).length; 
}; 

und übergeben es an orderBy Filter:

<li ng-repeat="n in news | orderBy:matchedPreferences:true">{{n}}</li> 

Dies wird die Nachricht von der Bestellung Anzahl der übereinstimmenden Präferenzen in absteigender Reihenfolge.

Hier ist die Fiddle

Verwandte Themen