Angular でデバウンスを実装するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-23 12:35:30
オリジナル
975 人が閲覧しました

How to Implement Debouncing in Angular?

Angular でのデバウンス

質問:

Angular でデバウンスを実装するにはどうすればよいですか?

答え:

Angular 2 では、フォーム コントロール値の変更時に RxJS 演算子を使用してデバウンスを実現できます。例:

<code class="typescript">import {Component}   from '@angular/core';
import {FormControl} from '@angular/forms';
import {Observable}  from 'rxjs/Observable';
import 'rxjs/add/operator/debounceTime';

@Component({
  selector: 'my-app',
  template: `<input type=text [value]="firstName" [formControl]="firstNameControl">
    <br>{{firstName}}`
})
export class AppComponent {
  firstName        = 'Name';
  firstNameControl = new FormControl();
  ngOnInit() {
    this.firstNameControl.valueChanges
      .debounceTime(1000)
      .subscribe(newValue => this.firstName = newValue);
  }
}</code>
ログイン後にコピー

このコードは、1000 ミリ秒の遅延でキーストローク イベントをデバウンスします。

最適化テクニック:

一方、上記のアプローチは有効である場合、不必要に変更検出がトリガーされる可能性があります。効率を高めるために、Angular の変更検出ゾーンの外で RxJS Observable を作成し、ChangeDetectorRef.detectChanges() を手動で呼び出すことを検討してください。

<code class="typescript">import {Component, NgZone, ChangeDetectorRef, ApplicationRef, 
        ViewChild, ElementRef} from '@angular/core';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/debounceTime';

@Component({
  selector: 'my-app',
  template: `<input #input type=text [value]="firstName">
    <br>{{firstName}}`
})
export class AppComponent {
  ngAfterViewInit() {
    Observable.fromEvent(this.inputElRef.nativeElement, 'keyup')
      .debounceTime(1000)
      .subscribe(keyboardEvent => {
        this.firstName = keyboardEvent.target.value;
        this.cdref.detectChanges();
      });
  }
}</code>
ログイン後にコピー

このアプローチにより、不要な変更検出が防止され、パフォーマンスが向上します。

以上がAngular でデバウンスを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!