私は現在、Webフロントエンドを備えたデータベースに取り組んでいます。このプロジェクトの以前のバージョンでjQueryを使用していたので、次のような「インスタント検索」機能にAngularJSを使用するようになりました。
function SearchCtrl($scope, $http) {
$scope.search = function() {
$scope.result = null;
$http({method: 'GET', url: 'api/items/search/' + $scope.keywords }).
success(function(data, status, headers, config) {
$scope.result = data;
}).
error(function(data, status, headers, config) {
$scope.status = status;
});
};
}
...
<div id="searchControl" ng-controller="SearchCtrl">
<form method="get" action="" class="searchForm">
<input type="text" id="search" name="search" ng-model="keywords" ng-change="search()"/>
<input type="submit" value="Search" />
</form>
<div ng-model="result">
<a href="javascript:void(0)" ng-repeat="items in result.items" >
<div class="card">
<span ng-show="items.id"><b>Item ID: </b>{{items.id}}<br></span>
<span ng-show="items.part_id"><b>Part ID: </b>{{items.part_id}}<br></span>
<span ng-show="items.description"><b>Description: </b>{{items.description}}<br></span>
<span ng-show="items.manufacturer"><b>Manufacturer: </b>{{items.manufacturer}}<br></span>
<span ng-show="items.product_range"><b>Range: </b>{{items.product_range}}<br></span>
<span ng-show="items.borrower"><b>Borrower: </b>{{items.borrower}}<br></span>
<span ng-show="items.end_date"><b>End Date: </b>{{items.end_date}}<br></span>
</div>
</a>
</div>
</div>
...
これはうまく機能しますが、1つの問題があります。「ng-change」で検索関数を呼び出しているため、検索語を入力するときに非常に時間がかかり、ブラウザがクラッシュすることがあります。古いバージョン(jQueryを使用)では、フラグを使用してgetリクエストがすでに実行されているかどうかをテストし、実行されている場合は、新しいリクエストを開始する前に中止しました。getリクエストを中止するためのAngularJSのドキュメントを見てきましたが、それでも賢明ではありません。誰かがこれまたは別の修正を達成する方法について何かアドバイスを持っているなら、私はそれを大いに感謝します。
ありがとう。