1. ホーム
  2. javascript

[解決済み] ngRepeat使用時の結果表示件数の制限について

2022-04-28 21:48:13

質問

を見つけることができます。 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 という行があります。引用符付きと引用符なしを試しましたが、どちらもうまくいきません。どうすればいいのでしょうか?

どのように解決するのですか?

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;
  }
);

プランカー