2015-02-09 40 views
0

我有一個自定義過濾器的問題,我正在努力,因爲我正在使用Angular 1.3.6,現在我無法升級,所以在這種情況下我真的需要你的幫助。自定義過濾器問題,我錯過了什麼?

see this Plnkr

如果鍵入1H過濾器返回所有以這些字符,這是真棒的聯賽,但是,如果你輸入...讓我們說:學院,過濾器返回所有sportsCollege開始,但這項運動的聯賽消失了,我的過濾器在聯賽中效果很好,但是如果你嘗試找到任何一項運動,那麼他的聯賽就會消失,我不希望這樣,我希望如果通過搜索體育,過濾器必須分別返回每個運動與他們的聯賽。

我想在你通過聯賽進行搜索時保​​持同樣的行爲,現在真棒,我的問題只是運動。見我的代碼如下

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

如果刪除第二個ng-repeat中的過濾器,該怎麼辦?這是你正在尋找的行爲? http://plnkr.co/edit/UQDZ0amamy0bP1UZo9xo?p=preview – rmuller 2015-02-09 17:32:54

+0

類似的東西,但在你的Plnkr鍵入** ncaa **,它會返回所有的聯賽和運動,包括** ncaa **,但不會移除其他像**生活投注 - NFL **和**現場投注 - 足球**聯賽** – NietzscheProgrammer 2015-02-09 17:37:13

回答

1

進行其他過濾器,如果他們sport's名中包含返回所有聯賽聯賽查詢通常會過濾它:

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

+0

天才,謝謝:) – NietzscheProgrammer 2015-02-09 21:25:23

+0

不客氣:) – tasseKATT 2015-02-09 21:30:49