我遇到了自定义过滤器的问题,我正在努力解决这个问题,因为我使用的是Angular 1.3.6而且我现在无法升级,所以在这种情况下我真的需要你的帮助。
如果您输入 1H ,过滤器会返回包含这些字符的所有联赛,这很棒,但是,如果您输入...,请说:学院,过滤器返回从大学开始的所有sports
,但该项运动的联赛消失,我的过滤器适用于联赛,但如果你试图找到任何一项运动,那么他的联赛消失了,我不想这样,我希望如果你搜索体育赛事,过滤器必须分别返回每个体育赛事的联赛。
我想在搜索联赛时保持相同的行为,现在很棒,我的问题只是运动。请参阅下面的代码
filter.js
.filter('myFilter', function() {
return function(sports, filterBy) {
if (!sports || !filterBy) {
return sports;
}
filterBy = filterBy.toLowerCase();
return sports.filter(function(sport) {
return (sport.name.toLowerCase().indexOf(filterBy) > -1) || sport.leagues.some(function(league) {
return league.name.toLowerCase().indexOf(filterBy) > -1;
});
});
};
});
sportsLeagues.html
<div ng-repeat="sport in sportsFilter = (sports | myFilter:query)">
<strong>{{sport.name}}</strong>
<div ng-repeat="league in sport.leagues | filter: { name:query }">
<div>{{league.name}} </div>
</div>
</div>
答案 0 :(得分:1)
如果他们的运动名称包含查询,则为联赛返回所有联赛的另一个过滤器,否则正常过滤它:
myApp.filter('leaguesFilter', function () {
return function (leagues, filterBy) {
if (!leagues || !filterBy) return leagues;
filterBy = filterBy.toLowerCase();
if (leagues[0] && leagues[0].sport.name.toLowerCase().indexOf(filterBy) > -1) return leagues;
else return leagues.filter(function (league) {
return league.name.toLowerCase().indexOf(filterBy) > -1;
});
};
});