如何在Angular 1.3.6上创建一个自定义过滤器来搜索嵌套数组
How to create a custom filter to search on nested arrays on Angular 1.3.6?
我有这个数组sports
,json看起来像:
[
{
"id": 26,
"name": "LIVE Betting",
"priority": 0,
"leagues": []
},
{
"id": 8,
"name": "NBA",
"priority": 3,
"leagues": [
{
"id": 5932,
"parent": 1000,
"name": "NBA",
"sport": {
"id": 8,
"name": "NBA"
},
"lineType": "G",
"priority": [
1,
3
],
"part": "0"
}
]
},
{
"id": 24,
"name": "College Basketball",
"priority": 4,
"leagues": [
{
"id": 2599,
"parent": 1000,
"name": "NCAA BASKETBALL",
"sport": {
"id": 24,
"name": "College Basketball"
},
"lineType": "G",
"priority": [
0,
4
],
"part": "0"
},
{
"id": 2631,
"parent": 1000,
"name": "NCAA BASKETBALL ADDED GAMES",
"sport": {
"id": 24,
"name": "College Basketball"
},
"lineType": "G",
"priority": [
1,
4
],
"part": "0"
},
...
在该数组中,你可以看到另一个名为"leagues": [{...}]
的数组,它包含一个Object
,我的过滤器正在顶部数组sports
中进行精细搜索,但一旦我试图在leagues
数组中的"name"
中找到,我的应用程序就会显示一条消息,说明过滤器为空。
我刚刚意识到这是因为我使用的是Angular的1.3.6
版本,但在Ionic人将其升级到1.3.8
之前,我无法更改它。我用1.3.8
版本制作了这个Plnkr,它正常工作,但如果你将同一个Plnkr上的版本更改为1.3.6
,则会自动停止搜索leagues.name
,只使用sport.name
,这里有一个版本为1.3.6的Plnkr,在两个Plnkr上都尝试搜索Greece
,在版本为1.3.8的第一个中有效,但在版本1.3.6中,只有消息no sports to show
出现
<input type="search" ng-model="query">
<div ng-repeat="sport in sportsFilter = (sports | filter:query)">
<!--this array works fine-->
<strong>{{sport.name}}</strong>
</div>
<div ng-repeat="league in sport.leagues">
<!--this one not works at all-->
{{league.name}}
</div>
</div>
我已经尝试了所有的方法,使用resolve
,使用不同的型号,等等,实际上我刚刚意识到我需要一个自定义过滤器,所以我希望你帮我一把,因为我不知道从哪里开始使用它。
或者有更简单的方法吗?
<div ng-app="myApp">
<div ng-controller="TestController">
<input type="search" placeholder="Search" ng-model="query">
<div role="alert" ng-show="sportfilter.length==0">No sports to show</div>
<div ng-repeat="sport in sportfilter=(sports | filter:matchNameDeep(query))" ng-show="sport.leagues.length">
<div>
<strong>{{sport.name}}</strong>
</div>
<div class="item item-button-right" ng-repeat="league in sport.leagues" on-tap="goToLines(league)">
{{league.name}}
</div>
</div>
</div>
</div>
$scope.matchNameDeep = function(query) {
return function(sport) {
return !query || sport.name.match(new RegExp(query, "ig")) || sport.leagues.some(function(element, index, array) {
return element.name.match(new RegExp(query, "ig"))
});
}
};
看这里,它与角1.3.6一起工作http://plnkr.co/edit/0w9PYbDsOz0mHBdVldZt?p=preview
您可以使用https://github.com/marklagendijk/lodash-deep对于这种类型的事情。
相关文章:
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 实现一个建立在google.com之上的自定义搜索引擎
- SuiteScript2.0-包括一个自定义文件
- dataTables-如何自定义分页类型以显示最后一个页码后面的省略号,
- 使用drupal中自定义javascript文件中的一个函数
- 遍历SC.ManyArrray以创建要附加到SproutCore中的另一个视图的自定义视图
- Wordpress在播放器旁边播放一个自定义的下载按钮,而不是下载
- hapi:包括一个js自定义库
- SuiteScript:如何有一个自定义的数据字段来从数据库加载信息
- 使用谷歌地图:一个返回undefined的自定义javascript函数
- 如何使用其他自定义指令中的元素标记作为另一个自定义指令的模板
- 调用另一个自定义指令的角度自定义指令
- 试图使一个事件依赖于另一个事件,并使用jquery自定义事件传递数据
- jQuery自定义验证只显示最后一个字段的错误
- 我想做一个自定义的dojo JsonRest商店,有一部分我没有'我不明白
- 如何获得一个动态增长的自定义对象的Javascript数组
- 如何调用另一个js文件中的函数或触发一个自定义事件,该事件将参数作为Jquery中的数据对象传递
- 我想知道如何创建一个自定义对话框,当点击按钮时会弹出
- 如何在谷歌地图API v3上自定义一个地面覆盖图标动画
- 我应该自定义一个照片库还是调整现有的