0

私の現在の状況は、50 台の車の情報をロードするモデルを持っているということです。ビューには、年、モデル、走行距離などのフィルターを備えたサイドバーがあります。それらをフィルターすると、すべて正常に機能しますが、モデルがかなり大きくなるため、クライアントはページネーションを要求しました。したがって、すべての車を 1 つのモデルにロードする代わりに、10 個だけをロードし、[さらに表示] ボタンをクリックすると、さらに 10 個をロードしてモデルに追加して表示します。

問題は、最初の 10 個だけをロードしてフィルター処理すると、クライアントはそれらすべてでフィルター処理しようとすることです。だから、仕方がないと思います。

私が確認できる唯一の方法は、モデル内のすべての車をロードし、一度に 10 台しか表示しないことです。フィルタリングを開始すると、この制限が破られ、すべてがフィルタリングされます。それは実行可能ですか?この問題にアプローチする他のアイデアはありますか?

4

3 に答える 3

0

サーバーでフィルタリングできます。ただし、JSON が返されたら、小さな変更を加える必要があります。

あなたが送る:

{ page: 0, itemsByPage: 10, year: 2012, ... }

JSON が返されると、レコードの合計とページ分割されたレコードが通知されます

{ totalRecords: 239, pageItems: [ { id: 28, name: 'ford mustang'}  ... ] }

次に、約束どおりに、「pageItens」を表示し、totalRecords に基づいてページ ボタンを表示します。

mysql を使用している場合は、found_rows() を使用して、ページ分割された選択で totalRecords を取得できます。

https://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows

于 2015-08-14T14:58:20.490 に答える
0

AngularJS には解決策がありません。

クライアントがページネーションを要求した場合、パフォーマンス上の理由が原因である可能性が最も高いです。この問題を回避し、フィルタリング以外のページネーションを実装しても、パフォーマンスの問題は解決されません。

フィルタリングは、すでにフィルタリングされた結果をクライアントに配信するサーバー側で行う必要があります。

于 2015-08-14T14:54:21.893 に答える
0

これを使用して欲望の行動を達成することができました: https://github.com/michaelbromley/angularUtils/tree/master/src/directives/pagination

于 2015-08-14T16:49:59.483 に答える