2014-07-22 43 views
1

Object是如何避免滤波一些对象属性的在角JS

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'> 

问题:

,如果我在文字过滤器的行选择, 搜索“233abc233”但是,这并不应该选择。

只有在名称和位置值,该行应提前选择”

感谢

回答

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

+0

问题是仍存在作为过滤器将检查名称和地点属性,如果其中一个属性返回false,则逻辑失败。 – praveenpds

+0

那么,你想要一个'OR'逻辑?如果名称或地点匹配,则应显示该行,对吗? – runTarm

+0

是的,你的正确。如果我输入“我”,它应该搜索名称或地方,如果名称是返回true,那么这个逻辑应该返回true,即行选择其他假 – praveenpds