2013-05-30 125 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()