2016-01-08 2 views
0

Я очень новичок в angular и, я не уверен, как управлять поведением моих фильтров.Несколько дополнительных фильтров в угловом

В приложении у меня есть два разных элемента управления drop down, которые фильтруют результаты моего набора данных и заполняют таблицу. Однако, несмотря на то, что эти фильтры работают, результаты зависят от обоих элементов управления, и если оба они не используются, возвращается пустой набор. Итак, мой вопрос: как я могу использовать эти фильтры по желанию? Таким образом, приложение возвращает каждый результат, когда фильтры не используются или возвращают отфильтрованные результаты одним из элементов управления или обоих?

Спасибо

Вот код:

AngularJS

Фильтры для каждого элемента управления. Они очень похожи:

.filter('byField', function() { 
    return function (results, options) { 
     var items = { options: options, out: [] }; 
     angular.forEach(results, function (value, key) { 

      for (var i in this.options) { 
       if ((options[i].value === value.fieldId && 
        options[i].name === "Field" && 
        options[i].ticked === true)) { 
         this.out.push(value); 
        } 
      } 
     }, items); 
     return items.out; 
    }; 
}) 

.filter('byClass', function() { 
    return function (results, options) { 
     var items = { options: options, out: [] }; 
     angular.forEach(results, function (value, key) { 

      for (var i in this.options) { 
       if ((options[i].value === value.documentClass && 
        options[i].name === "Class" && 
        options[i].ticked === true)) { 
         this.out.push(value); 
        } 
      } 

     }, items); 
     return items.out; 
    }; 
}) 

HTML

Это то, что я делаю, чтобы заполнить rows таблицы:

<tr ng-repeat="result in results | byField:outputFields | byClass:outputClasses"> 
    <td>{{result.documentId}}</td> 
    ... 
</tr> 

ответ

0

Ну, как я и представлял, ответ был более связан с set theory, чем с angular.

Я только что сделал union между пустым множеством и каждым результатом, и он сработал.

.filter('byField', function() { 
    return function (results, options) { 
     var items = { options: options, out: [] }; 
     angular.forEach(results, function (value, key) { 
      if (options.length) { 
       for (var i in this.options) { 
        if ((options[i].value === value.fieldId && 
         options[i].name === "Field" && 
         options[i].ticked === true)) { 
          this.out.push(value); 
         } 
       } 
      } else { 
       this.out = results.slice();       
      }     
     }, items); 
     return items.out; 
    }; 
}) 
0

Dorado7.1 во всех слушателей событий обеспечивает просмотр неявная переменная, указывающая на представление хоста текущего события, переменная может полностью заменить использование этого сценария.

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