2013-05-30 124 views
6

我是Angular的新手。我試圖過濾基於選擇框選擇的選項顯示的數據集。Angular JS ng:基於選擇選項的重複過濾器

<div ng-controller="CurrentTrandetailsController"> 
    <div> 
     <div class="pull-right">   
      <label for="show-filter" class="show-label">Show </label> 
      <select name="show-filter" ng-model="searchText.accruedcard" id="show-filter" ng-options="trandetail.accruedcard as trandetail.accruedcard for trandetail in currentTrandetails.trandetails "> 
       <option value="">All</option> 
      </select>      
     </div> 
     <h3>Current trandetails</h3> 
    </div> 
    <div> 
     <table class="table table-striped table-hover"> 
      <tbody> 
       <tr ng-repeat="trandetail in currentTrandetails.trandetails | filter:searchText"> 
        <td>{{trandetail.dateAccrued}}</td> 
        <td>{{trandetail.accruedcard}}</td> 
        <td>{{trandetail.placeAccrued}}</td> 
        <td>{{trandetail.discountcents}}</td> 
        <td>{{trandetail.shortExpiryDate}}</td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 

我應用於http://docs.angularjs.org/api/ng.filter:filter給出的例子,它使用一個輸入框進行過濾。在選擇給定的卡時,它似乎過濾得很好。但是,當我選擇其值設置爲「」的「全部」時,它不顯示所有條目(清除過濾器)。但是,在所示的示例中,當清除文本框時,會顯示所有條目。

我在做什麼錯?

回答

4

你需要改變你的選擇:代替

<select name="show-filter" ng-model="searchText" ... 

<select name="show-filter" ng-model="searchText.accruedcard" ... 

說明:從我所看到的東西,它不是通常使用硬編碼選項以及ng選項,這是造成這個問題的原因。過濾器使用select的模型,它與Angular示例中的一樣,當前是一個對象而不是字符串。 Object patterns are okay但在這種情況下,當選擇全部,因爲它沒有連線到選擇一樣的其餘選項對象的屬性成爲null

這是什麼原因造成的searchText過濾器失敗,因爲它需要有效字符串(使用對象的匹配模式,即使)。

通過對select模型使用字符串原語,All'hack'被保留,因爲它會導致select的模型變爲('')而不是null,這將匹配所有內容並顯示所有結果。

+0

神奇...感謝出色的響應。 – user1159790

0

我遇到了同樣的問題。我修復它的方式是在過濾器中使用.toString()