Html 两个对象字段上的AngularJs过滤器

Html 两个对象字段上的AngularJs过滤器,html,angularjs,filter,Html,Angularjs,Filter,我以前做过很多次过滤,但在这个具体案例中遇到了麻烦。我在分页中设置了一个对象列表,但我也希望能够对它们进行筛选,以便于使用。示例对象可能如下所示: { baseline:0.75 clonedFrom:Object description:"Just a simple description.." includeable:false key:"bc889881-7979-4e04-b586-d53faab26b6b" name:"Just a si

我以前做过很多次过滤,但在这个具体案例中遇到了麻烦。我在分页中设置了一个对象列表,但我也希望能够对它们进行筛选,以便于使用。示例对象可能如下所示:

{
    baseline:0.75
    clonedFrom:Object
    description:"Just a simple description.."
    includeable:false
    key:"bc889881-7979-4e04-b586-d53faab26b6b"
    name:"Just a simple question?"
    type:"BayesianModel"
    version:1483477351992
    versionComment:null
    versionLabel:"0.11"
}
在大多数情况下,对象的外观是任意的,我只是为了便于回答而将其包括在内。我试图同时过滤对象的名称和描述。例如,如果用户知道其中一个关键词,他们可以缩小搜索结果的范围

我有一个过滤器的输入,结果在a中显示如下:

<ul class="list-group">
  <li class="list-group-item">
    <div class="form-group has-feedback">
      <input type="text"
          ng-model="vm.resultFilter"
          ng-change="vm.updateFilter()"
          class="form-control filterInput"
          placeholder="Filter Results" />
      <span ng-if="vm.resultFilter"
          ng-click="vm.resultFilter = ''; vm.updateFilter();"
          class="fa fa-times fa-lg form-control-feedback">
      </span>
    </div>
  </li>
  <li class="list-group-item link-row model-list"
      ng-repeat="result in vm.filteredResults
          | startFrom : ((vm.currentPage - 1) * vm.itemsPerPage)
          | limitTo: vm.itemsPerPage"
      ng-if="result.name != vm.model.name"
      ng-click="vm.selected = result;"
      ng-class="{selected: result === vm.selected}"
      ng-init="displayNumber = vm.incrementDisplayIndex();">
    <h4 class="list-group-item-heading">{{result.description}} - {{result.name !== vm.model.name}}</h4>
    <p class="list-group-item-text">
      {{result.name}}
    </p>
  </li>
</ul>

我只是无法让过滤100%正常工作。有时它看起来只是在描述字段上过滤,但有时我会搜索一个单词,它只在一个结果的描述字段中,并且它将过滤,而没有结果,这将是错误的。非常感谢您的提示。

由于您的HTML中没有使用过滤器,因此我建议您使用数组原型中的过滤器属性

function updateFilter() {
  vm.filteredResults = vm.results.filter(function(item){
    return (item.name==vm.resultFilter || item.description==vm.resultFilter )
  }

  vm.totalItems = vm.filteredResults.length;
  vm.noOfPages = Math.ceil(vm.filteredResults.length / vm.itemsPerPage);
}
以防您需要确定字符串是否包含指定字符串的字符。您可能需要使用includes而不是==


考虑到您的过滤器与and运算符一起工作。这意味着,结果必须同时匹配条件名称和描述才能成为结果。我理解你的意思,但我没有在任何地方使用and运算符?除非将这两个字段都指向vm.resultFilter,否则将发生这种情况。如果是这种情况,那么如何使其成为OR运算符?指向两个字段,使过滤器在AND条件下工作。这可能会有帮助,我很感激这个链接。我已经看过了@that,这个问题的结果只是过滤对象的一个字段。这只是它是否等于家庭或行为,两者都位于对象的类型字段下。我想我在尝试一两个不同的领域。太好了。所以第二个是我想要的。如果你知道的话,这只是一个奇怪的问题:你知道如何在这种情况下使过滤不区分大小写吗?默认情况下角度为,但在本例中,因为它是“Doit include the string”,显然它是区分大小写的,这对我来说是不可取的。使用string属性将字符串转换为小写。toLowerCase item.name.toLowerCase.includesvm.resultFilter.toLowerCase很酷,是的,这是显而易见的解决方案;但看看我是否还有其他选择。感谢您今天的帮助。据我所知,您没有设置的选项。
function updateFilter() {
  vm.filteredResults = vm.results.filter(function(item){
    return (item.name==vm.resultFilter || item.description==vm.resultFilter )
  }

  vm.totalItems = vm.filteredResults.length;
  vm.noOfPages = Math.ceil(vm.filteredResults.length / vm.itemsPerPage);
}
vm.filteredResults = vm.results.filter(function(item){
   return (item.name.includes(vm.resultFilter) || item.description.includes(vm.resultFilter) )
}