我有一个产品数组,我在使用ng-repeat和正在使用
<div ng-repeat="product in products | filter:by_colour">
按颜色过滤这些产品。滤镜正在工作,但如果产品名称/描述等包含颜色,那么在滤镜应用后,产品仍然存在。
我如何设置过滤器只适用于我的数组的颜色字段,而不是每个字段?
我有一个产品数组,我在使用ng-repeat和正在使用
<div ng-repeat="product in products | filter:by_colour">
按颜色过滤这些产品。滤镜正在工作,但如果产品名称/描述等包含颜色,那么在滤镜应用后,产品仍然存在。
我如何设置过滤器只适用于我的数组的颜色字段,而不是每个字段?
当前回答
按颜色搜索:
<input type="text" ng-model="searchinput">
<div ng-repeat="product in products | filter:{color:searchinput}">
你也可以做一个内巢。
filter:{prop1:{innerprop1:searchinput}}
其他回答
指定你想要应用滤镜的属性(即颜色):
<div ng-repeat="product in products | filter:{ colour: by_colour }">
你可以通过一个对象来过滤,它的属性与你要过滤的对象相匹配:
app.controller('FooCtrl', function($scope) {
$scope.products = [
{ id: 1, name: 'test', color: 'red' },
{ id: 2, name: 'bob', color: 'blue' }
/*... etc... */
];
});
<div ng-repeat="product in products | filter: { color: 'red' }">
这当然可以通过变量传递,正如Mark Rajcok建议的那样。
最好的方法是使用函数:
html
<div ng-repeat="product in products | filter: myFilter">
javascript
$scope.myFilter = function (item) {
return item === 'red' || item === 'blue';
};
另外,你也可以使用ngHide或ngShow根据特定的条件动态地显示和隐藏元素。
如果希望筛选给定对象的孙辈(或更深层),则可以继续构建对象层次结构。例如,如果你想过滤'thing.properties. properties '。Title ',您可以执行以下操作:
<div ng-repeat="thing in things | filter: { properties: { title: title_filter } }">
你也可以过滤一个对象的多个属性,只需将它们添加到你的过滤器对象:
<div ng-repeat="thing in things | filter: { properties: { title: title_filter, id: id_filter } }">
如果你要做以下事情:
<li class="active-item" ng-repeat="item in mc.pageData.items | filter: { itemTypeId: 2, itemStatus: 1 } | orderBy : 'listIndex'"
id="{{item.id}}">
<span class="item-title">{{preference.itemTitle}}</span>
</li>
...您不仅可以获得itemTypeId 2和itemStatus 1的项,还可以获得itemType 20、22、202、123和itemStatus 10、11、101、123的项。这是因为过滤器:{…}语法的工作原理类似于字符串包含查询。
然而,如果你要添加:true条件,它将通过精确匹配进行过滤:
<li class="active-item" ng-repeat="item in mc.pageData.items | filter: { itemTypeId: 2, itemStatus: 1 } : true | orderBy : 'listIndex'"
id="{{item.id}}">
<span class="item-title">{{preference.itemTitle}}</span>
</li>