我有一个产品数组,我在使用ng-repeat和正在使用

<div ng-repeat="product in products | filter: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建议的那样。

其他回答

我的方式是这样

subjcts is

[{"id":"1","title":"GFATM"},{"id":"2","title":"Court Case"},{"id":"3","title":"Renewal\/Validity"},{"id":"4","title":"Change of Details"},{"id":"5","title":"Student Query"},{"id":"6","title":"Complains"}]

sub是Input字段或者其他你喜欢的

像这样显示

<div ng-if="x.id === sub" ng-repeat=" x in subjcts">{{x.title}}</div>

请参见过滤器页面上的示例。使用一个对象,并在color属性中设置颜色:

Search by color: <input type="text" ng-model="search.color">
<div ng-repeat="product in products | filter:search"> 

你可以通过一个对象来过滤,它的属性与你要过滤的对象相匹配:

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建议的那样。

指定你想要应用滤镜的属性(即颜色):

<div ng-repeat="product in products | filter:{ colour: by_colour }">

你必须使用 过滤器:{color_name:by_colour}代替

filter:by_colour

如果你想匹配一个对象的单个属性,那么写这个属性而不是object,否则其他的属性会被匹配。