ngRepeat - 限制显示结果的数量

Cap*_*ack 147 javascript model-view-controller scope angularjs

我是一个巨大的AngularJS n00b,我甚至发现教程很难理解.本教程将引导我构建一个显示电话的应用程序.我在第5步,我认为这是一个实验,我试图让用户指定他们想要显示多少.该视图如下所示:

<body ng-controller="PhoneListCtrl">

  <div class="container-fluid">
    <div class="row-fluid">
      <div class="span2">
        <!--Sidebar content-->

        Search: <input ng-model="query">
        How Many: <input ng-model="quantity">
        Sort by:
        <select ng-model="orderProp">
          <option value="name">Alphabetical</option>
          <option value="age">Newest</option>
        </select>

      </div>
      <div class="span10">
        <!--Body content-->

        <ul class="phones">
          <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
            {{phone.name}}
            <p>{{phone.snippet}}</p>
          </li>
        </ul>

      </div>
    </div>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

我添加了这一行,用户可以输入他们想要显示的结果数量:

How Many: <input ng-model="quantity">
Run Code Online (Sandbox Code Playgroud)

这是我的控制器:

function PhoneListCtrl($scope, $http) {
  $http.get('phones/phones.json').success(function(data) {
    $scope.phones = data.splice(0, 'quantity');
  });

  $scope.orderProp = 'age';
  $scope.quantity = 5;
}
Run Code Online (Sandbox Code Playgroud)

重要的是:

$scope.phones = data.splice(0, 'quantity');
Run Code Online (Sandbox Code Playgroud)

我可以硬编码一个数字来表示应该显示多少手机.如果我输入5,将显示5.我想要做的就是从视图中读取该输入中的数字,并将其放在data.splice行中.我试过有没有引号,也没有工作.我该怎么做呢?

Ste*_*wie 343

稍微更多的"Angular方式"将是使用直接limitTo过滤器,如Angular本身提供的:

<ul class="phones">
  <li ng-repeat="phone in phones | filter:query | orderBy:orderProp | limitTo:quantity">
    {{phone.name}}
    <p>{{phone.snippet}}</p>
  </li>
</ul>
Run Code Online (Sandbox Code Playgroud)
app.controller('PhoneListCtrl', function($scope, $http) {
    $http.get('phones.json').then(
      function(phones){
        $scope.phones = phones.data;
      }
    );
    $scope.orderProp = 'age';
    $scope.quantity = 5;
  }
);
Run Code Online (Sandbox Code Playgroud)

PLUNKER

  • 值得指出的是 - 并且在几分钟内保存其他人 - 如果你正在使用"追踪"它必须在过滤器之后持续. (52认同)
  • 有没有办法在使用filter和limitTo时获取可用项目的数量?我想使用`limitTo`但提供"加载更多"按钮来增加限制.只有在有更多可用记录时才会显示此信息. (3认同)
  • @TimBüthe尝试此解决方案:http://stackoverflow.com/a/19665313/1095616 (2认同)

cou*_*zzi 46

派对有点晚了,但这对我有用.希望其他人发现它有用.

<div ng-repeat="video in videos" ng-if="$index < 3">
    ...
</div>
Run Code Online (Sandbox Code Playgroud)

  • 我有一个场景,我想要从更多的后备阵列中显示6个项目.使用`ng-if ="$ index <6"`允许我只显示前6个,同时保持整个数组可搜索(我有一个过滤器与搜索字段相结合). (3认同)
  • 我怀疑如果它是一个大型数组,这将比使用limitToFilter效率低,因为每个项目可能都需要进行评估 (2认同)