Angular ディレクティブが懸念事項の分離をどのように維持するかについての詳細な分析?

青灯夜游
リリース: 2022-01-23 09:30:34
転載
2279 人が閲覧しました

Angular ディレクティブは懸念事項の分離をどのように維持しますか?この記事では、Angular ディレクティブを通じて関心の分離を維持する方法を説明します。

Angular ディレクティブが懸念事項の分離をどのように維持するかについての詳細な分析?

アプリケーションに日付ピッカー コンポーネントがあるとします。ユーザーが日付を変更するたびに、イベントが分析プロバイダーに送信されます。これまでのところ、これを 1 回しか使用していないため、この分析インターフェイスは、それを使用するコンポーネントに配置できます:

header-1.ts

import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroyed';

@UntilDestroy()
class FooComponent {
  timespanControl = new FormControl();

  ngOnInit() {
    this.timespanControl.valueChanges
      .pipe(untilDestroyed(this))
      .subscribe(({ preset }) => {
        this.analyticsService.track('timespan-filter apply', {
          value: preset,
        });
      });
  }
}
ログイン後にコピー

しかし、この分析インターフェイスを使用する場所が増えたので、同じコードを繰り返し記述したくなくなりました。このコードを日付ピッカーに組み込み、入力パラメータとして渡すことができると提案する人もいるかもしれません。 [関連チュートリアルの推奨事項: "angular チュートリアル"]

data-picker-1.component.ts

class DatePickerComponent {
  @Input() analyticsContext: string;
   
  constructor(private analyticsService: AnalyticsService) {}

  apply() {
    this.analyticsService.track('timespan-filter apply', {
      context: this.analyticsContext,
      value: this.preset,
    });

    ...
  }
}
ログイン後にコピー

確かに、これは実現できます。 , しかし、これは理想的なデザインではありません。 関心の分離 は、日付ピッカー自体は分析インターフェイスとは何の関係もなく、分析インターフェイスに関する情報を知る必要がないことを意味します。

さらに、日付ピッカーは内部コンポーネントであるため、そのソース コードを変更できますが、それがサードパーティ コンポーネントの場合はどうなるでしょうか?どうやって解決すればいいでしょうか?

ここでのより良い選択は Angular ディレクティブです。ディレクティブを作成し、DI を通じてフォームへの参照を取得し、内部値の変更をサブスクライブして分析イベントをトリガーします。 datePickerAnalytics.directive.ts

@UntilDestroy()
@Directive({
  selector: '[datePickerAnalytics]',
})
export class DatePickerAnalyticsDirective implements OnInit {
  @Input('datePickerAnalytics') analyticsContext: string;

  constructor(
    private dateFormControl: NgControl,
    private analyticsService: AnalyticsService
  ) {}

  ngOnInit() {
    this.dateFormControl
      .control.valueChanges.pipe(untilDestroyed(this))
      .subscribe(({ preset }) => {
        this.analyticsService.track(
          'timespan-filter apply',
          {
            value: preset,
            context: this.analyticsContext
          }
        );
      });
  }
}
ログイン後にコピー

日付ピッカーを使用するたびにこれを使用できるようになりました。

<date-picker [formControl]="control" datePickerAnalytics="fooPage"></date-picker>
ログイン後にコピー

英語の元のアドレス: https://netbasal.com/maintaining-separation-of-concerns-through-angular-directives-8362ccdf655b

原著者: Netanel Basal

プログラミング関連の知識について詳しくは、プログラミング ビデオをご覧ください。 !

以上がAngular ディレクティブが懸念事項の分離をどのように維持するかについての詳細な分析?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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