>  기사  >  웹 프론트엔드  >  Angular 지시문이 관심사 분리를 유지하는 방법에 대한 심층 분석은 무엇입니까?

Angular 지시문이 관심사 분리를 유지하는 방법에 대한 심층 분석은 무엇입니까?

青灯夜游
青灯夜游앞으로
2021-12-20 14:50:282219검색

Angular 지시어는 어떻게 관심사 분리를 유지하나요? 이 글은 Angular 지시문을 통해 관심사 분리를 유지하는 방법을 보여드리겠습니다. 도움이 되길 바랍니다.

Angular 지시문이 관심사 분리를 유지하는 방법에 대한 심층 분석은 무엇입니까?

애플리케이션에 날짜 선택기 구성요소가 있다고 가정해 보겠습니다. 사용자가 날짜를 변경할 때마다 분석 제공자에게 이벤트가 전송됩니다. 지금까지는 한 번만 사용했으므로 이 분석 인터페이스를 이를 사용하는 구성 요소에 배치할 수 있습니다:

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 tutorial"]

data-picker-1.comComponent.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제