角度ng重复滤波

时间:2016-09-30 08:46:25

标签: angularjs

我有一个深层嵌套的对象。我有一些记录,其中包含2个显示对象属性键的字段。我也有选择需要按对象的属性搜索记录并输入按对象的键搜索。因此,如果我选择option1并输入一些文本输入,它将在第一个字段中显示匹配(而不是第二个!)。第二场也类似。

我如何努力实现:
我写了一个过滤器http://plnkr.co/edit/z9DEmfYz2grW9UonLcFK?p=preview

.filter('appFilter', function() {
    return function(value, select, input) {

      var result = [];
      input = input.toLowerCase();
      var reg = new RegExp(input,'g');    

      if (angular.isArray(value)) {
        if (input === '' || $scope.isFiltering) {
          return value;
        } else if (select.value === 'Sequence') {
          for (let i = 0; i < value.length; i++) {
            if (value[i].Sequence.toLowerCase().match(reg)) {
              result.push(value[i]);
            }
          }
            return result;
        } else if (select.value === 'ID') {
          for (let i = 0; i < value.length; i++) {
            if (angular.isArray(value[i].Document)) {
              for (let j = 0; j < value[i].Document.length; j++) {
                if (value[i].Document[j].ID.toLowerCase().match(reg)) {
                    result.push(value[i]);
                 }
              }

            }
          }
          return result;            
        } else {
            console.log('error');
        }
      }
    }
  })

在控制器中,我设置选择第一个选项:$scope.selectParameter = $scope.parameter[0];
在调试中我设置输入参数一些值(例如123)。

所以我通过包含123值的第一个字段搜索记录。结果找到并推送对象。但在浏览器中显示任何内容

问题是什么?我无法避免使用&#39;?&#39;我的选择中的值:(

已更新
几乎解决了我的问题:http://plnkr.co/edit/z9DEmfYz2grW9UonLcFK?p=preview
它按适当的字段和输入值进行过滤。但是我遇到了另一个麻烦 当输入为空时,它不显示任何记录。第二个是当我选择第二个选项(ID)过滤器复制一些记录时 此外,我尝试通过单击复选框关闭过滤器而不清除输入文本。
这是我想要做的,但它不起作用:

else if (input === '' || $scope.isFiltering) {
    return value;
}
对于复选框输入,

$scope.isFilteringng-model

1 个答案:

答案 0 :(得分:2)

我尝试使用angulars默认过滤器。我不确定这是不是你想要的,但也许它有点帮助。

.filter('appFilter', function($filter) {
  return function(value, select, input) {
    if( !angular.isDefined(input) || input.length < 1) {
      return value;
    }

    // Angulars "filter" lets you pass in a object-structure to search for nested fields.
    var query = 
        (select.value === 'Sequence') ?
            {Sequence:input} : {Document:{ID:input}};

    return $filter('filter')(value, query);
  }
})

http://plnkr.co/edit/Egkw9bUvTPgooc0u2w7C?p=preview