Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 控制器中的角度嵌套滤波器_Javascript_Angularjs_Angularjs Scope_Angularjs Filter - Fatal编程技术网

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);