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

时间:2015-02-09 17:25:26

标签: javascript angularjs

我遇到了自定义过滤器的问题,我正在努力解决这个问题,因为我使用的是Angular 1.3.6而且我现在无法升级,所以在这种情况下我真的需要你的帮助。

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

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>

1 个答案:

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

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