首页前端开发JavaScript深入浅析Angular指令如何保持关注点的分离?

深入浅析Angular指令如何保持关注点的分离?

时间2024-01-31 02:22:03发布访客分类JavaScript浏览331
导读:收集整理的这篇文章主要介绍了深入浅析Angular指令如何保持关注点的分离?,觉得挺不错的,现在分享给大家,也给大家做个参考。Angular指令如何保持关注点的分离?本篇文章带大家了解一下通过 Angular 指令保持关注点分离的方法,希望...
收集整理的这篇文章主要介绍了深入浅析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教程》】

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指令如何保持关注点的分离?的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

指令

若转载请注明出处: 深入浅析Angular指令如何保持关注点的分离?
本文地址: https://pptw.com/jishu/593354.html
什么是Ruby 深入了解node.js中的module-alias(分享一些避坑方法)

游客 回复需填写必要信息