如何避免过滤角度js中的某些对象属性

时间:2014-07-22 14:49:43

标签: javascript angularjs filter

对象

StudentObj = {name : 'Me', Place : 'Bangalore',uniqueId :'233abc233' }

Html模板

<ul>
  <li ng-repeat:'entry in StudentObj |filter:sText' >
         <span>{{entry.name}}</span>
         <span ng-bind='entry.place'></span> 
   </li>
</ul>

搜索过滤器

<input type='text' ng-model='sText'>

问题:

如果我搜索&#39; 233abc233 &#39;在文本过滤器中,行正在选择,  但是不应该选择。

仅在名称和地点值上,应选择行&#34;

先谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用此类过滤器仅匹配两个字段:

<li ng-repeat="entry in StudentObj | filter:{name: sText, Place: sText}">

有关如何使用过滤器的更多变体,请参阅filter

编辑:如果您需要OR逻辑(如果匹配任何键,则匹配),您必须滚动自己的过滤器,例如,

在控制器中:

$scope.customFilter = function (searchText) {
  function comparator(a, b) {
    return (''+a).toLowerCase().indexOf((''+b).toLowerCase()) > -1;
  }

  var lookInKeys = ['name', 'Place'];

  return function (item) {
    if (!searchText) {
      return true; // no filter
    }

    for (var i = 0; i < lookInKeys.length; i++) {
      var key = lookInKeys[i];
      if (comparator(item[key], searchText)) {
        return true; // if any key is match, return true
      }
    }

    return false; // none of keys are match
  };
};

然后在ng-repeat中使用它,如下所示:

<li ng-repeat="entry in StudentObj | filter:customFilter(sText)">

示例plunker: http://plnkr.co/edit/Mlca2gXvXNVAXEsNbpCI?p=preview