2013-08-29 4 views
2

Может кто-нибудь мне помочь в создании углового js customfilter.угловой js несколько флажок с пользовательскими фильтрами

Я создал два динамических фильтра (бренды и торговцы) из записей (данные Json) для фильтрации записей с несколькими флажками.

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

на основе выбранных фильтров следует выбрать записи.

мои данные JSON является

$scope.records = [ 
    { 
    "MerchantName": "Fashion and You", 
    "BrandList": " Nike, Fila", 
    "Description": "Fashion and You Store" 
    }, 
    { 
    "MerchantName": "Fashion and You", 
    "BrandList": " Levis, Fasttrack, Fila", 
    "Description": "Fashion and You Store" 
    }, 
    { 
    "MerchantName": "ebay", 
    "BrandList": "Nokia,HTC,Samsung", 
    "Description": "Ebay Store" 
    }, 
    { 
    "MerchantName": "amazon", 
    "BrandList": "Apple,Dell,Samsung", 
    "Description": "amazon Store" 
}, 
{ 
    "MerchantName": "amazon", 
    "BrandList": " pepe jeans, peter england, red tape", 
    "Description": "amazon Store" 
}]; 

Html является

<div ng-repeat="record in records"> 
    {{record.Description}} 
</div> 

здесь fiidle: http://jsfiddle.net/Hp4W7/106/

Спасибо заранее.

+0

Является ли это фильтром «И» или «ИЛИ», как в Amazon OR Dell/Amazon и Dell? – TheSharpieOne

ответ

3

Вот фильтр корпуса. Он вернет результаты для товаров, соответствующих торговой марке.

Пример: http://jsfiddle.net/TheSharpieOne/ZebC7/

Что было добавлено:

Нам нужно что-то для хранения галочки проверила, это будет объект, ключ является торговцем или бренд и значением является истиной/ложь, если ему . Затем мы просматриваем объекты, чтобы определить, что выбрано, и делаем все, что вы хотите, в методе searchFilter, который передается фильтру повтора.

<label><input type="checkbox" ng-model="merchantCheckboxes[Merchant.Merchantname]" /> {{Merchant.Merchantname}}</label> 

Вот дополнение к контролю»

$scope.merchantCheckboxes = {}; 
$scope.brandCheckboxes = {}; 
function getChecked(obj){ 
    var checked = []; 
    for(var key in obj) if(obj[key]) checked.push(key); 
    return checked; 
} 
$scope.searchFilter = function(row){ 
    var mercChecked = getChecked($scope.merchantCheckboxes); 
    var brandChecked = getChecked($scope.brandCheckboxes); 
    if(mercChecked.length == 0 && brandChecked.length == 0) 
     return true; 
    else{ 
     if($scope.merchantCheckboxes[row.MerchantName]) 
      return true; 
     else{ 
      return row.BrandList.split(/,\s*/).some(function(brand){ 
       return $scope.brandCheckboxes[brand]; 
      }); 
     } 
    } 
}; 

UPDATE

Сделан проверяемые флажки появляются первым, и изменить фильтр поиска для "И"

Примера : http://jsfiddle.net/TheSharpieOne/ZebC7/1/

<li ng-repeat="Merchant in MerchantList| orderBy:[orderChecked,'Merchantname']"> 

Функция заказать проверенные из них первый (из одной функции для обоих)

$scope.orderChecked = function(item){ 
    if(item.Merchantname && $scope.merchantCheckboxes[item.Merchantname]) 
     return 0; 
    else if(item.brandname && item.brandname.split(/,\s*/).some(function(brand){ 
       return $scope.brandCheckboxes[brand]; 
      })) 
     return 0; 
    else 
     return 1; 
}; 

Кроме того, изменить фильтр поиска для «И»

$scope.searchFilter = function(row){ 
    var mercChecked = getChecked($scope.merchantCheckboxes); 
    var brandChecked = getChecked($scope.brandCheckboxes); 
    if(mercChecked.length == 0 && brandChecked.length == 0) 
     return true; 
    else{ 
     if(($scope.merchantCheckboxes[row.MerchantName] && brandChecked.length==0) 
      || (mercChecked.length == 0 && row.BrandList.split(/,\s*/).some(function(brand){ 
       return $scope.brandCheckboxes[brand]; 
      })) 
      || ($scope.merchantCheckboxes[row.MerchantName] && row.BrandList.split(/,\s*/).some(function(brand){ 
       return $scope.brandCheckboxes[brand]; 
      }))) 
      return true; 
     else{ 
      return false; 
     } 
    } 
}; 

необходима Некоторые очистки, но вы можете как все это можно сделать.

+0

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

+0

также у нас есть возможность слияния со встроенными функциями в угловом для достижения этого –

+0

Не уверен, что вы имеете в виду, но Угловая предоставляет разработчикам возможность определять свои собственные функции для достижения этого.Это все, что мы можем использовать для их достижения. В Angular вы заметите отсутствие определенных способностей, в то время как другие, очень похожие способности предоставляются из коробки. Я считаю, что они (Google) в основном просто добавляют то, что им обычно нужно, и оставляют нам остальное. Тем не менее, они обеспечивают отличный способ расширения углов, что упрощает его использование. – TheSharpieOne

Смежные вопросы