ホームページ  >  記事  >  ウェブフロントエンド  >  Angular でデバウンスを実装するにはどうすればよいですか?

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

Barbara Streisand
Barbara Streisandオリジナル
2024-10-23 12:35:30976ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。