自定义过滤器的问题,我缺少什么

Issue with custom filter, what am I missing ?

本文关键字:什么 过滤器 问题 自定义      更新时间:2023-09-26

我正在处理的自定义过滤器有问题,我很难解决这个问题,因为我使用的是Angular 1.3.6,现在无法升级,所以在这种情况下我真的需要你的帮助。

看到这个Plnkr

如果您键入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;
          });
      });
    };
  });

体育联盟.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>

为联赛制作另一个过滤器,如果其运动名称包含查询,则会返回所有联赛,否则会正常过滤:

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

演示:http://plnkr.co/edit/0vYKtBETxDx1tD3udO9Z?p=preview