2014-12-02 5 views
-1

Я хочу, чтобы фильтровать результаты по идентификатору, или рейтингу и различными другими ключами, я использую эту структуру данных:Как фильтровать угловые результаты по id и другим клавишам?

[ 
{ 
    "id": "1" 
    "Description": "desc 1", 
    "Rating": "rating 1", 
    "MainImage": "image.jpg" 
}, 
{ 
    "id":"1" 
    "Description": "desc 2", 
    "Rating": "rating 2", 
    "MainImage": "image.jpg" 
}, 
{ 
    "id": "2" 
    "Description": "desc 3", 
    "Rating": "rating 3", 
    "MainImage": "image.jpg" 
} 
] 

Эти данные возвращенное обещания и назначенная $scope.results. В шаблоне есть ng-repeat, чтобы перебирать результаты. Это нормально работает, мой вопрос:

Как отфильтровать результаты на id, так, например, отображаются только результаты с id из 1? У меня было это, но это было не самым эффективным. Я переназначил отфильтрованные результаты до $scope.results, которые действительно работали, но затем вся структура данных была заменена той, которая содержит отфильтрованные результаты. Очевидно, что это не сработало, и я работал, но я знаю, что это не лучший способ.

Мне нужен настраиваемый фильтр, который сможет обрабатывать фильтрацию с использованием 3 разных списков выбора, например, список rating, productId и productName.

Как именно я буду писать эту функцию?

<div class="product" data-ng-repeat="product in products | filter:searchFilter"></div> 
+1

Непонятная тема: значения идентификатора должны быть уникальными, независимо от их применения. – isherwood

+2

Возможный дубликат [Как фильтровать свойство объекта в angularJS] (http://stackoverflow.com/questions/17793751/how-to-filter-by-object-property-in-angularjs) – isherwood

+0

см. [Http: // stackoverflow.com/questions/26874748/how-to-render-only-visible-items-in-angularjs-dropdown/26874894#26874894](http://stackoverflow.com/questions/26874748/how-to-render-only -visible-предметы-в-angularjs-выпадающий/26874894 # 26874894) – letiagoalves

ответ

-1

Вот как я это делаю.

<input type="number" ng-modal="idFilter:selectedID"> 
<div ng-repeat="result in results | idFilter:selectedID | track by $index"> 
<something-repeated> 
</div> 

<script> 
angular.module('whatever').filter('idFilter', function(){ 
    return function(results, selectedID){ 
    return results.filter(function(result){ 
     return result.id == selectedID; 
    }); 
    } 
}); 
</script> 
0

Я закончил тем, что делал что-то, что я нашел here и создал функцию в интерфейсе. Что-то вроде:

$scope.searchFilter = function (item) { 
    return (item.id === $scope.results.id) 
} 

Этот код не совсем то, что я использовал, но это общая идея. Кажется, работает :)

0
//This will filter the product list based on all 3 criteria 
<div class="product" data-ng-repeat="product in products | filter:{rating:selectedRating, id:selectedId,productName:selectedProduct }"></div>