我正在学习Angularjs,我有一个小问题:
我从用户
返回了以下数组userPreferences = [7,5,4]
我有一个对象,我正在使用ng-repeat来显示所有新闻,看起来像这样:
{
"id": 1,
"preferences": [
3,
4
]
}
所以,我想在我的ng-repeat中使用,从用户首选项返回的数组,并首先对显示首选项的新闻进行排序,然后在其他新闻下面排序,是否可能?
类似的东西:
<li ng-repeat="new in news | filter:{'userPreferences' : new.preferences}">
我真的不知道我是否必须使用filter,orderBy或sort,请帮忙吗?
答案 0 :(得分:1)
您可以拥有自己的函数,返回范围内匹配的preferences
的编号:
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;
};
并将其传递给orderBy
过滤器:
<li ng-repeat="n in news | orderBy:matchedPreferences:true">{{n}}</li>
这将按照匹配的首选项的数量按降序排序新闻。
这里是Fiddle