151

AngularJS のチュートリアルは理解しにくいと思います。これは、電話を表示するアプリの構築について説明しています。私はステップ 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>

ユーザーが表示したい結果の数を入力できる次の行を追加しました。

How Many: <input ng-model="quantity">

これが私のコントローラーです:

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

  $scope.orderProp = 'age';
  $scope.quantity = 5;
}

重要な行は次のとおりです。

$scope.phones = data.splice(0, 'quantity');

表示する電話の数を表す数値をハードコーディングできます。入れる5と5が表示されます。私がやりたいことは、ビューからその入力の数字を読み取り、それをdata.splice行に入れることだけです。引用符の有無にかかわらず試しましたが、どちらも機能しません。どうすればいいですか?

4

7 に答える 7

348

Angular によってネイティブに提供されているように、もう少し「Angular の方法」は単純なlimitToフィルターを使用することです。

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

PLUNKER

于 2013-07-14T21:07:42.383 に答える
47

パーティーに少し遅れましたが、これは私にとってはうまくいきました。うまくいけば、他の誰かがそれが役に立つと思います。

<div ng-repeat="video in videos" ng-if="$index < 3">
    ...
</div>
于 2014-02-14T16:07:39.500 に答える
1

オブジェクトまたは多次元配列がある場合、これは私の場合にうまく機能します。最初の項目のみが表示され、他の項目はループで無視されます。

.filter('limitItems', function () {
  return function (items) {
    var result = {}, i = 1;
    angular.forEach(items, function(value, key) {
      if (i < 5) {
        result[key] = value;
      }
      i = i + 1;
    });
    return result;
  };
});

あなたが望むものに5を変更します。

于 2016-04-01T22:48:45.880 に答える