2016-08-03 2 views
0

Я хочу создать специальный фильтр, который будет фильтровать объект по «цветам». У меня есть более крупный объект, но для этого случая я создал маленький, чтобы показать вам, в чем проблема, поэтому у меня есть json вот так:Угловой множественный фильтр

[ 
    { 
    "nazwa": "koszule", 
    "colors": [ 
     "white" 
    ], 
    "rozmiary": [], 
    "url": "/pl/p/koszule/3693", 
    "rodzaj": 2, 
    "img": "/images/nophoto_300x300.jpg", 
    "muszka": null, 
    "alt": "koszule" 
    }, 
    { 
    "nazwa": "koszule", 
    "colors": [ 
     "blue" 
    ], 
    "rozmiary": [], 
    "url": "/pl/p/koszule/3693", 
    "rodzaj": 2, 
    "img": "/images/nophoto_300x300.jpg", 
    "muszka": null, 
    "alt": "koszule" 
    }, 
    { 
    "nazwa": "koszule", 
    "colors": [ 
     "white", 
     "blue" 
    ], 
    "rozmiary": [], 
    "url": "/pl/p/koszule/3693", 
    "rodzaj": 2, 
    "img": "/images/nophoto_300x300.jpg", 
    "muszka": null, 
    "alt": "koszule" 
    } 
] 

у меня также есть множественного выбора, на мой взгляд

<md-input-container class="md-block" flex-gt-sm> 
          <md-select ng-change="checkColors()" ng-model="kolorEnd" multiple> 
           <md-optgroup label="<?php echo $this->translate('kolory'); ?>"> 
            <md-option ng-value="unikalneKoloryWidok" ng-repeat="unikalneKoloryWidok in unikalneKolory | orderBy : expression">{{unikalneKoloryWidok}} </md-option> 
           </md-optgroup> 
          </md-select> 
</md-input-container> 

и в контроллере:

$scope.dataParsed = angular.fromJson(prdData); 
    angular.forEach($scope.dataParsed , function(item , i) { 
     angular.forEach(item.kolory , function(item , i) { 
      wszystkieKolory.push(item); 
     }); 
}); 
$scope.unikalneKolory = $.unique(wszystkieKolory); 

     $scope.checkColors = function(){ 
      $scope.$watch('kolorEnd' , function(oldv,newv) { 
       $scope.kolory = oldv.toString(); 
      }); 
     }; 
    frost.filter('colorsFlt' , function(){ 
     return function(data,inpArray) { 
      var output = []; 
      if (angular.isArray(inpArray)) { 


      } 
     } 

То, что я хочу достичь, - если кто-то выбирает только «белый» вариант, показывают только продукты с «белым» цветом, если клиент выбирает «белый» и «синий», он должен показывать продукты, которые имеют только белый и только синий, но также продукты, которые имеют «белый», «синий». Я в ловушке :) И не знаю, как написать мой фильтр, чтобы добиться этого. Пожалуйста, помогите;)

ответ

0

Так что я достиг того, что я хотел, пытаясь разные вещи :) Вот код в впрок:

контроллер

frost.filter('megaFlt' , function(){ 
    return function(data,firstarg , secarg , filtertype) { 
     var output = []; 
     if (angular.isString(firstarg) || angular.isString(secarg)) { 
       angular.forEach(data,function(el,j) { 
        $.map(el[filtertype],function(test,i){ 
         if(test == firstarg || test == secarg) { 
          return output.push(data[j]); 
         } 
        }); 
       }); 
      return output; 
     } 
     else { 
      return data; 
     } 

    } 
}); 

вид

<md-input-container class="md-block" flex-gt-sm> 
        <md-select ng-change="checkColors()" ng-model="kolorEnd" multiple> 
         <md-optgroup label="<?php echo $this->translate('kolory'); ?>"> 
          <md-option ng-value="unikalneKoloryWidok" ng-repeat="unikalneKoloryWidok in unikalneKolory | orderBy : expression">{{unikalneKoloryWidok}} </md-option> 
         </md-optgroup> 
        </md-select> 
       </md-input-container> 

и поставить фильтр в элементе ng-repeat

| megaFlt:kolorEnd[0]:kolorEnd[1]:'kolory' 
Смежные вопросы