[解決済み] 角度変化遅延
2022-08-23 16:30:37
質問
私は、変更時にng-repeatリストをフィルタリングする入力を持っています。繰り返しは多くのデータを含み、すべてをフィルタリングするのに数秒かかります。私は、フィルタリング処理を開始する前に0.5秒の遅延があることを望みます。 この遅延を作成するために、アンギュラーで正しい方法は何ですか?
入力
<input ng-model="xyz" ng-change="FilterByName()" />
繰り返す
<div ng-repeat"foo in bar">
<p>{{foo.bar}}</p>
</div>
フィルタ機能
$scope.FilterByName = function () {
//Filtering Stuff Here
});
ありがとうございます。
どのように解決するのですか?
AngularJS 1.3+
AngularJS 1.3 からは
debounce
プロパティを利用できるようになりました。
ngModelOptions
を使用することなく、非常に簡単にそれを実現することができます。
$timeout
を全く使わずに、非常に簡単に実現できます。以下はその例です。
HTMLです。
<div ng-app='app' ng-controller='Ctrl'>
<input type='text' placeholder='Type a name..'
ng-model='vm.name'
ng-model-options='{ debounce: 1000 }'
ng-change='vm.greet()'
/>
<p ng-bind='vm.greeting'></p>
</div>
JSです。
angular.module('app', [])
.controller('Ctrl', [
'$scope',
'$log',
function($scope, $log){
var vm = $scope.vm = {};
vm.name = '';
vm.greeting = '';
vm.greet = function greet(){
vm.greeting = vm.name ? 'Hey, ' + vm.name + '!' : '';
$log.info(vm.greeting);
};
}
]);
-- OR --
AngularJS 1.3以前
遅延を追加するために$timeoutを使用する必要があり、おそらく$timeout.cancel(previoustimeout)を使用すると、以前のタイムアウトをキャンセルして新しいものを実行できます(フィルタリングが時間間隔内に連続して複数回実行されることを防ぐのに役立ちます)。
以下はその例です。
app.controller('MainCtrl', function($scope, $timeout) {
var _timeout;
//...
//...
$scope.FilterByName = function() {
if(_timeout) { // if there is already a timeout in process cancel it
$timeout.cancel(_timeout);
}
_timeout = $timeout(function() {
console.log('filtering');
_timeout = null;
}, 500);
}
});
関連
-
[解決済み] オブジェクトと選択機能を備えたAngularJS BootstrapUI Typeahead
-
[解決済み] AngularJSのグローバル変数
-
[解決済み] AngularJSのシンプルな "Hello, world "が動作しない。
-
AngularJSのベストプラクティス。ng-repeatの$indexに注意する。
-
[解決済み] Ui-srefがクリッカブルリンクを生成しない/動作しない
-
[解決済み] AngularJSを使用して、ブラウザのコンソールで$scope変数にアクセスするにはどうすればよいですか?
-
[解決済み] angular-routeとangular-ui-routerの違いは何ですか?
-
[解決済み] コントローラでフィルタを使用するには?
-
[解決済み] ng-modelとng-bindの違いは何ですか?
-
[解決済み] Angularで複数のフィールドをorderByする
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Angularjsのng-viewが動作しない。
-
[解決済み] プリフライト応答が成功しない
-
[解決済み] AngularJSのng-showとフェードアニメーション
-
[解決済み] AngularJSのシンプルな "Hello, world "が動作しない。
-
[解決済み] Angular ng-repeatの条件付きラップアイテム(ng-repeatのグループアイテム)。
-
[解決済み] AngularJSでkeypressイベントを使用するには?
-
[解決済み] AngularJSの$parentは何を意味するのですか?
-
[解決済み] エラーです。10回の$digest()反復に達しました。動的なsortby述語で中断!?
-
[解決済み] ng-pattern` - 数字だけをチェックする方法は?
-
[解決済み] 子コントローラから親スコープにアクセスするAngularJS