我试图在我的角度过滤器中忽略名为title的属性。我有一个类似下面例子的数据集:
const data = [
{
title: 'Title 1'
groups: [
{...},
{...},
{...}
]
},
{
title: 'Title 2'
groups: [
{...},
{...},
{...}
]
},
{
title: 'Title 3'
groups: [
{...},
{...},
{...}
]
}
];
我使用带有过滤器的ng-repeat来迭代对象,然后使用其他循环遍历这些组:
<input ng-model="search">
<div ng-repeat="item in data | filter:search">
<h1>{{item.title}}</h1>
<ul>
<li ng-repeat="group in item.group | filter:search">
<span>{{group.something}}</span>
</li>
</ul>
</div>
工作正常,但现在我想忽略搜索中的标题。我确实尝试过几个方面,例如:filter:search:item.title
(在第一个ng-repeat中),或删除第一个filter:search
,但所有尝试都失败了。我错过了什么?我需要自定义搜索或类似的东西吗?
谢谢。
答案 0 :(得分:1)
您可以专门输入要过滤的属性并省略标题:
<li ng-repeat="group in item.groups | filter: { something: search }">
以上代码只会根据某些属性进行过滤。
答案 1 :(得分:0)
如果您键入并且没有过滤title属性,只需删除第一个过滤器。这种方式当你输入li不匹配时会隐藏,但是他们的h1将保持不变。
答案 2 :(得分:0)
您应该创建自定义过滤器,您可以在其中指定应排除哪个属性(忽略参数):
angular.module('app', []).controller('MyController', ['$scope', function($scope) {
$scope.data = [
{name:"Tom", title:'London'},
{name:"Max", title:'Moscow'},
{name:"Henry", title:'NY'},
{name:"Paul", title:'NY'},
{name:"Sam", title:'Paris'}
];
}]).filter('myfilter',function(){
return function(input, search, ignore){
if(!search)
return input;
var result = [];
for(var item of input)
for(var prop in item)
if(prop != ignore && item[prop].indexOf(search) != -1)
{
result.push(item) ;
break;
}
return result;
}
});
&#13;
<script src="//code.angularjs.org/snapshot/angular.min.js"></script>
<body ng-app="app">
<div ng-controller="MyController">
search: <input type='text' ng-model='search' ng-init='search="a"'/>
ignore: <input type='text' ng-model='ignore' ng-init='ignore="title"'/>
<ul>
<li ng-repeat='item in data | myfilter: search: ignore'>
{{item.name}} {{item.title}}
</li>
</ul>
</div>
</body>
&#13;