Javascript 控制器中的角度嵌套滤波器
我有按标题(字符串)或标签(字符串数组)搜索的项目 项目:Javascript 控制器中的角度嵌套滤波器,javascript,angularjs,angularjs-scope,angularjs-filter,Javascript,Angularjs,Angularjs Scope,Angularjs Filter,我有按标题(字符串)或标签(字符串数组)搜索的项目 项目: [ { title: 'My title', tags: ['tag1', 'other'] }, { title: 'Misc', tags: ['tag1', 'notag'] } ] 我想要一个输入来搜索标题或标签 在我的模板中,这很有效: <form> <input type="text" ng-model="query"> </form&g
[
{
title: 'My title',
tags: ['tag1', 'other']
},
{
title: 'Misc',
tags: ['tag1', 'notag']
}
]
我想要一个输入来搜索标题或标签
在我的模板中,这很有效:
<form>
<input type="text" ng-model="query">
</form>
<li ng-repeat="item in items | filter:query:title | filter:query:tags">
<p>{{item.title}}</p>
</li>
但是我没有得到相同的结果,我遗漏了什么?首先,您在HTML中使用的过滤器不正确。如果查看,您将看到它需要一个表达式和一个比较器。因此,从现在开始,在HTML中,您将
query
作为表达式传递,将title
或tags
作为比较器传递,两者都未定义
因为要传递字符串作为表达式
字符串作为表达式计算,结果值为
用于与数组内容进行子字符串匹配。全部的
数组中包含此字符串的字符串或具有字符串属性的对象
字符串将被返回
换句话说,将搜索每个项中的所有属性以查找查询。这就是为什么它似乎是通过标题
和/或标签
进行过滤的原因
然后,在控制器中,传递一个对象作为表达式。这使得它实际上只返回给定属性与给定值匹配的项。但是,由于您要调用它两次,因此您正在筛选项目,其中标题
和标记
与查询
匹配
有两种方法可以解决这个问题
如果您不介意在所有字段中搜索query
,可以按如下操作。在HTML中,替换为
<li ng-repeat="item in items | filter:query">
$scope.filteredItems = $filter("filter")($scope.items, $scope.query);
但是,如果您只想搜索标题
和标签
,则要复杂得多。有关如何创建搜索多个字段的自定义筛选器的信息,请参阅本文:
但是如果OP只想过滤
标题
和标签
?谢谢你的回答:)是的,我只想过滤标题和标签。有没有办法只使用特定值保留默认角度过滤器?不幸的是,默认角度过滤器只允许过滤所有指定值,而不是某些值。
$scope.filteredItems = $filter("filter")($scope.items, $scope.query);