5

現在、データ内の検索に filter:query を使用しています。このようなものです

<input type="text" ng-model="query">
<tr ng-repeat="thought in thoughts | filter:query">
<td>thought.title</td>
</tr>

完全なjsonデータを一度にロードすると、うまく機能します。今私の質問は、完全なデータセットを一度にロードしたくないので、ページネーションと一緒にサーバー側の検索を実現できるかということです。

1 つのアプローチ: 現在の結果セットの検索は、フィルターを使用して通常どおり実行できます。結果が見つからない場合は、別のデータを要求するサーバーを呼び出します。このアプローチは良いですか?

4

2 に答える 2

3

サーバー上に検索を実行してサブセットを返す API/CGI があると仮定すると (たとえば、SQL を使用してlimit start,number)、これを達成するのはそれほど複雑ではありません。新しいクエリを開始するときはthoughts、空の配列に設定してから、最初の API 呼び出しを行います (例: 10 個の結果を返す)。次に、次の API 呼び出しを行うためのボタンまたはその他のメカニズムを使用して、結果 11-20 を返すことができます。$http コールバック関数では、サーバーから返されたデータを常に配列に追加するだけで、新しいデータが最後に追加されます。したがって、次のようなものを考えてみてください(これは実際にテストされたコードではなく、この回答のために書き留めただけです):

$scope.getdata = function() {
  $http.post('/api/whatever', 
  { query: $scope.query, startat: $scope.thoughts.length })
    .success(function(response,status,headers,config){
      $scope.thoughts.push.apply( $scope.thoughts, reponse.data );
    });

$scope.search = function() {
  $scope.thoughts = [];
  $scope.getdata();
}

Search for: <input ng:model="query">
<button ng:click="search()">Search</button>
<button ng:click="getdata()">Get more results</button>
于 2013-10-29T20:34:36.773 に答える
1

最初の ajax リクエストですべてのデータをクライアントにロードしない限り、クライアント側の検索を行う方法はありません。

サーバー側の検索がおそらく最善の策です。

于 2013-10-29T20:22:27.413 に答える