私のアプリには単純な angular.js フィルターがあり、正常に機能しましたが、サーバー側の検索を統合する必要があります。このためのエンドポイントがあり、入力でクエリを監視し、結果を返すサーバーにリクエストを行うディレクティブを作成しました。
html:
<search ng-model="query"></search>
js:
...
restrict: 'E',
scope: {
ngModel: '='
},
template: '<input type="text" ng-model="ngModel" />',
link: function (scope, elem, attrs) {
var timer = false;
scope.$watch('ngModel', function (value) {
if (timer) {
$timeout.cancel(timer);
}
timer = $timeout(function () {
if (value) {
scope.$parent.items = rest.query({ resource: 'search', query: value });
}
}, 1000);
});
}
...
ただし、問題は範囲内です。ご覧のとおり、検索結果を同じコントローラーで同じページにとどめる必要があるため、結果を親スコープ アイテムに書き込んでいます (クライアント側フィルターの場合と同様)。
複数のコントローラーと検索結果の共通テンプレート:
<ul class="items">
<li class="item item{{$index+1}}" ng-repeat="item in items">
...
</li>
</ul>
したがって、サーバー側の検索クエリの結果を表した後、入力フィールドをクリアするときに、検索前に表されたすべてのアイテムを何らかの形で返す必要があり、現在これに対する最適なソリューションを見つけることができません..
誰かが以前に似たようなものを作ったのではないでしょうか?