मेरे पास चार फ़िल्टरिंग हैं जैसे JobType, Experience, DateAdded और Salary मैं व्यक्तिगत और समूह के रूप में फ़िल्टरिंग करना चाहता हूं। इसके लिए मैंने अपने कंट्रोलर में फ़िल्टर टाइप के रूप में एक फिल्टर को परिभाषित किया और बोलो की तरह टेम्पलेट में जोड़ा।

मेरे नियंत्रक में

.filter('filterType', function($filter) {

      // Create the return function
      // set the required parameter name to **params**
      return function(jobs,workType,experience,dateAdded,salary) {
          var filtered =[];
          var wT = angular.isUndefined(workType);
          var exp = angular.isUndefined(experience);
          var dA = angular.isUndefined(dateAdded);
          var sal = angular.isUndefined(salary);

          if(wT && exp && dA && sal)
            return jobs;


      angular.forEach(jobs,function(job){
        if(exp && dA && sal){
          if(job.type == workType)
              filtered.push(job)
        }
        else if(dA && sal && wT){
          var exp_val = $filter('split')(experience,',',0);  
          if(job.experience ==  exp_val)
              filtered.push(job)            
        }
        else if(sal && wT && exp){
          var date_field = $filter('pastDay')(job.created_at);
            console.log(job.created_at);
            console.log(date_field);
          if(dateAdded == date_field){
             filtered.push(job);
          }

        }
        else if(wT && exp && dA){
          var exp_val = $filter('split')(experience,',',0);  
          if(job.created_at ==  exp_val)
              filtered.push(job)            
        }

      });      
      return filtered;
  }
 })  

मेरे खाके में

<div flex="20" flex-sm="100" ng-repeat="job in jobs | filterType: workType:experience:dateAdded:salary">

फ़िल्टरिंग काम कर रहा है जैसा कि मैंने उम्मीद की थी, समस्या यह है कि अगर मैं फ़िल्टरिंग के सेट के साथ फ़िल्टर करना चाहता हूं तो क्या मुझे इसके लिए if / else के सेट को लिखने की आवश्यकता है। यह एक लंबे काम की तरह लगता है ..

किसी को भी हल करने का सबसे अच्छा तरीका सुझा सकते हैं ????????

1
user3391137 27 नवम्बर 2015, 07:21

2 जवाब

सबसे बढ़िया उत्तर
.filter('filterType', function($filter) {

// Create the return function
// set the required parameter name to **params**
  return function(jobs,wT,exp,dA,sal) {
    var filtered =[];
    var multiple = false;

  if(!wT && !exp && !dA && !sal)
    return jobs;


    if(wT){
         var val = multiple ? filtered : jobs;
         var filtered_wT = [];  
         angular.forEach(val,function(job){
          if(job.type == wT)
            filtered_wT.push(job);
         });
            filtered = filtered_wT;
            multiple = true;
    }
    if(exp){
          var exp_val = $filter('split')(exp,',',0);
          var filtered_exp = [];
          var val = multiple ? filtered : jobs;
            angular.forEach(val,function(job){
             if(job.experience ==  exp_val)
               filtered_exp.push(job);
             });
            filtered = filtered_exp;
            multiple = true;
    }
    if(dA){
         var val = multiple ? filtered : jobs;
         var filtered_dA = [];
         angular.forEach(val,function(job){
          var date_field = $filter('pastDay')(job.created_at);                       
           if(dA == date_field)
            filtered_dA.push(job);
           });
        filtered = filtered_dA;
        multiple = true;
    }
    if(sal){
        var filtered_sal = [];
        angular.forEach(jobs,function(job){
          var min_sal = $filter('split')(sal,'-',0);  
          var max_sal = $filter('split')(sal,'-',1);  
          if(min_sal >= job.minsalary && max_sal <= job.maxsalary)    
            filtered_sal.push(job);
        });
        filtered = filtered_sal;
        multiple = true;
    }

  return filtered;
  }
})    
0
user3391137 27 नवम्बर 2015, 11:08

आप इसे इस तरह से कर सकते हैं:

.filter('filterType', function($filter) {
  return function(jobs,workType,experience,dateAdded,salary) {
    var filtered = Array.prototype.slice.apply(jobs); // make a copy of the array
  if(!workType && !experience && !dateAdded && !salary){
    return filtered;
  }

  if(workType){
    filtered = $filter('filter')(filtered, {type: workType});
  }

  if(experience){
   //filter by experience, like workType
  }

  if(dateAdded){
   // filter by date, like workType
  }

  //     ... other filters

  return filtered;
 }
})  
1
sirrocco 27 नवम्बर 2015, 04:42