[解決済み] AngularJSのインスタント検索にディレイをかけるには?
2022-05-03 17:42:23
質問
パフォーマンスの問題があり、対処できないようです。インスタント検索を使用しているのですが、検索を開始する際に、それぞれの
keyup()
.
JSです。
var App = angular.module('App', []);
App.controller('DisplayController', function($scope, $http) {
$http.get('data.json').then(function(result){
$scope.entries = result.data;
});
});
HTMLです。
<input id="searchText" type="search" placeholder="live search..." ng-model="searchText" />
<div class="entry" ng-repeat="entry in entries | filter:searchText">
<span>{{entry.content}}</span>
</div>
JSONデータはそれほど大きくなく、300KB程度です。私が達成すべきことは、キーストロークごとにアクションを実行するのではなく、ユーザーが入力を終えるのを待つために、検索に〜1秒の遅延をかけることだと思います。AngularJSは内部的にこれを行い、ドキュメントやここの他のトピックを読んだ後、私は特定の答えを見つけることができませんでした。
インスタント検索を遅らせる方法について、何かご指摘があれば幸いです。
解決方法は?
(Angular 1.3の解決策は以下の回答を参照してください。)
ここでの問題は、モデルが変更されるたびに、つまり入力に対するキー操作のたびに、検索が実行されることです。
これを行うにはよりクリーンな方法がありますが、おそらく最も簡単な方法は、バインディングを切り替えて、フィルタが動作するコントローラ内で$scopeプロパティを定義することでしょう。そうすれば、$scope 変数が更新される頻度を制御することができます。このような感じです。
JSです。
var App = angular.module('App', []);
App.controller('DisplayController', function($scope, $http, $timeout) {
$http.get('data.json').then(function(result){
$scope.entries = result.data;
});
// This is what you will bind the filter to
$scope.filterText = '';
// Instantiate these variables outside the watch
var tempFilterText = '',
filterTextTimeout;
$scope.$watch('searchText', function (val) {
if (filterTextTimeout) $timeout.cancel(filterTextTimeout);
tempFilterText = val;
filterTextTimeout = $timeout(function() {
$scope.filterText = tempFilterText;
}, 250); // delay 250 ms
})
});
HTMLです。
<input id="searchText" type="search" placeholder="live search..." ng-model="searchText" />
<div class="entry" ng-repeat="entry in entries | filter:filterText">
<span>{{entry.content}}</span>
</div>
関連
-
[解決済み] splunk 検索で行を列に変換する
-
[解決済み] AngularJSでデータバインディングはどのように機能するのですか?
-
[解決済み] Vimで大文字小文字を区別しない検索をする方法
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] AngularJSで$scope.$watchと$scope.$applyを使用するにはどうすればよいですか?
-
[解決済み] AngularJS コントローラにおける 'this' と $scope の比較
-
[解決済み] Androidで遅延後にメソッドを呼び出す方法
-
[解決済み] 検索エンジンはAngularJSアプリケーションをどのように扱っているのか?
-
[解決済み】GitHubでコミットメッセージを検索する方法は?
-
[解決済み] GitHubのコード検索で文字をエスケープするには?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Vimで検索したものをハイライトしないようにするには?[重複している]
-
[解決済み] splunk 検索で行を列に変換する
-
[解決済み] grepを再帰的に使用する
-
[解決済み] ファイルを grep して、その周辺の行をいくつか表示する?
-
[解決済み] SolrとElasticSearchの比較【終了しました
-
[解決済み】ElasticSearchの初心者向け解説書【終了しました
-
[解決済み】GitHubでコミットメッセージを検索する方法は?
-
[解決済み] インデックスを作成せずにファイル内の文字列を検索するツール【終了しました
-
[解決済み] AngularJSのインスタント検索にディレイをかけるには?
-
[解決済み] GitHubのコード検索で文字をエスケープするには?重複