1

Ruby on Rails バックエンドで AngularJS の ng-table を使用しています。一度に 10 行を表示するために ng-table を使用しており、サーバー側で検索/並べ替えとページネーションを行っています。

私が抱えている問題は、フィルターがキーストロークごとにサーバーにリクエストを送信していることです。送信ボタンを介してフィルターをサーバーに送信するまで、ng-table を待機させることは可能ですか?

  $scope.tableParams = new ngTableParams({
    page: if page then page else 1,
    count: 10,
    sorting: { invoice_no: 'desc'}
  }, {
    total: 0,

    getData: ($defer, params) ->
      Invoice.query params.url(), (data) ->
        params.total($scope.total)

        # put params in url
        $location.search(params.url())

        # Paginate / update table with new data
        $defer.resolve(data)
  })

私の現在の見解

<table ng-table="tableParams" show-filter="true" class="table">
  <tr class='listing' ng-repeat="invoice in $data">
    <td data-title="'Invoice No.'" sortable="'invoice_no'" filter="{'invoice_no':'text'}">
      {{invoice.invoice_no}}
    </td>
  </tr>
</table>
4

1 に答える 1

1

インライン フィルターは何度も呼び出されます。

送信ボタンがクリックされたときにフィルターを 1 回呼び出すには、クリック ハンドラーを追加します。

<button type="submit" ng-click="onSubmit()" />

コントローラーで、クリック ハンドラー内でフィルターを呼び出します。

app.controller('ctrl', function($scope, $filter) {
   $scope.$data = [];

   $scope.onSubmit = function() {
       $scope.$data = $filter('filter')($scope.data, {'invoice_no':'text'});
   }
});
于 2014-08-04T06:07:49.690 に答える