【问题标题】:filter ng-repeat yet preserve initial length / count过滤 ng-repeat 但保留初始长度/计数
【发布时间】:2016-03-14 21:23:59
【问题描述】:

我一直在扩展 angularjs 网站上的一个演示以添加更多动态过滤。

我有 3 个过滤器:

  1. 通过输入字段查询过滤器。

  2. 通过选择字段排序过滤器。

  3. 通过选择字段显示的结果数。

虽然所有 3 个都独立工作,但当第一个被归档时,我遇到了第 3 个问题。我希望第三个选择字段中的下拉选项保留初始计数。

我有以下FIDDLE。在输入字段中输入单词“dell”会得到 2 个可以正常工作的结果。

这在第三个过滤器上提供了以下选项。 “全部”、“1”、“2”。 但是,当我尝试在第三个过滤器上选择“1”(只显示一个结果)时,一切都消失了。

首先,我不知道为什么会发生这种情况 - 因为当您搜索“moto”这个词时,这个功能可以正常工作。其次,在第三个过滤器中保留初始结果数量会很好。

当我在第一个字段中输入“moto”时,它会显示 10 个结果,并且以下数字仍会显示在第三个字段中。 'ALL'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'10'。

我想要的是,当点击第三个字段中的任何上述数字时,它们都仍然存在。目前,例如,当我单击“3”时,仅显示以下内容“全部”、“1”、“2”、“3”。

代码。

  <div class="form-group">
    <label for="search">Search:</label>
    <input id="search" ng-model="query">
  </div>

  <div class="form-group">
   <label for="sort">Sort by:</label>
   <select id="sort" ng-model="phoneCtrl.orderProp">
     <option value="name">Alphabetical</option>
     <option value="age">Newest</option>
     <option value="-age">Oldest</option>
   </select>
  </div>

  <div class="form-group">
    <label for="show">Show:</label>
    <select id="show" ng-model="phoneCtrl.limitProp">
      <option value="">All</option>
      <option ng-repeat="phone in filtered" value="{{$index+1}}">{{$index+1}}</option>
    </select>
  </div>

  <ul class="phones list-unstyled">
    <li ng-repeat="phone in filtered = (phoneCtrl.phones | limitTo : phoneCtrl.limitProp : begin | filter:query | orderBy:phoneCtrl.orderProp)">
      <article class="phone">
         <h2 class="h3">{{phone.name}}</h2>
         <p>{{phone.snippet}}</p>
      </article>

    </li>
   </ul>

【问题讨论】:

    标签: javascript angularjs angularjs-ng-repeat angularjs-filter


    【解决方案1】:

    要使您的第三个过滤器限制为多个项目,您需要在 phoneCtrl.phones 而不是 filtered 上重复,因为 filtered 对象会改变但 phoneCtrl.phones 不会改变。

    &lt;option ng-repeat="phone in phoneCtrl.phones" value="{{$index+1}}"&gt;{{$index+1}}&lt;/option&gt;

    要使过滤器协同工作,请将limitTo 过滤器移到filtered 对象的定义之外,否则您的过滤器将只能查看n 电话数量。

    <li ng-repeat="phone in filtered = (phoneCtrl.phones | filter:query | orderBy:phoneCtrl.orderProp) | limitTo : phoneCtrl.limitProp : begin ">
    

    Updated Fiddle

    【讨论】:

    • 谢谢 - 现在真的很好用。虽然我确实在重复时添加了filtered,因为这是我想要的功能。正是将 limitTo 放在了定义之外,这给了我想要的确切结果。布里尔.. + 1 Edited Fiddle
    • 我明白你现在的意思了。你原来的方法效果更好。
    猜你喜欢
    • 2015-04-08
    • 2015-05-25
    • 2014-02-18
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多