Maison > interface Web > js tutoriel > le corps du texte

Une brève discussion sur la façon de maintenir la séparation des préoccupations à l'aide des instructions angulaires ?

青灯夜游
Libérer: 2021-09-13 10:42:21
avant
1328 Les gens l'ont consulté

Comment maintenir la séparation des préoccupations à l'aide des directives Angular ? L'article suivant vous présentera comment maintenir la séparation des préoccupations grâce aux instructions angulaires. J'espère qu'il vous sera utile !

Une brève discussion sur la façon de maintenir la séparation des préoccupations à l'aide des instructions angulaires ?

Disons que nous avons un composant de sélection de date dans notre application. Chaque fois que l'utilisateur modifie la date, un événement est envoyé au fournisseur d'analyse. Jusqu'à présent, nous ne l'avons utilisé qu'une seule fois, cette interface d'analyse peut donc être placée dans le composant qui l'utilise : [Recommandation de tutoriel associée : "tutoriel angulaire"]

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,
        });
      });
  }
}
Copier après la connexion

Mais, Maintenant, nous avons plus d'endroits pour utiliser cette interface d'analyse et nous ne voulons pas écrire le même code à plusieurs reprises. Quelqu'un pourrait suggérer que ce code pourrait être incorporé dans un sélecteur de date et transmis comme paramètre d'entrée.

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,
    });

    ...
  }
}
Copier après la connexion

En effet, cela peut être réalisé, mais ce n'est pas une conception idéale. Séparation des préoccupations signifie que le sélecteur de date lui-même n'a rien à voir avec l'interface d'analyse et qu'il n'a pas besoin de connaître d'informations sur l'interface d'analyse.

De plus, le sélecteur de date étant un composant interne, nous pouvons modifier son code source, mais que se passe-t-il s'il s'agit d'un composant tiers ? Comment le résoudre ?

Le meilleur choix ici est la directive Angular. Créez une directive, obtenez la référence du formulaire via DI et abonnez-vous à la modification de la valeur interne pour déclencher l'événement d'analyse. 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
          }
        );
      });
  }
}
Copier après la connexion

peut désormais être utilisé à chaque fois que le sélecteur de date est utilisé.

<date-picker [formControl]="control" datePickerAnalytics="fooPage"></date-picker>
Copier après la connexion

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal