首页前端开发JavaScript浅谈利用Angular指令怎么保持关注点分离?

浅谈利用Angular指令怎么保持关注点分离?

时间2024-01-30 08:15:02发布访客分类JavaScript浏览792
导读:收集整理的这篇文章主要介绍了浅谈利用Angular指令怎么保持关注点分离?,觉得挺不错的,现在分享给大家,也给大家做个参考。利用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,        }
    );
      }
    );
  }
}
    

但是,现在我们有更多的地方使用这段分析的接口,我们并不想重复的编写同样的代码。有人可能提出这段代码可以合并到日期选择器中并作为输入参数传递。

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>
    

更多编程相关知识,请访问:编程视频!!

以上就是浅谈利用Angular指令怎么保持关注点分离?的详细内容,更多请关注其它相关文章!

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

上一篇: 如何使用es6的set下一篇:深入了解Node.js中的四大流解决...猜你在找的JavaScript相关文章 html font标签如何设置字体大小?html font标签属性用法介绍2022-05-16vue3+TypeScript+vue-router的使用方法2022-04-16vue3获取当前路由地址2022-04-16如何利用React实现图片识别App2022-04-16JavaScript展开运算符和剩余运算符的区别详解2022-04-16微信小程序中使用vant框架的具体步骤2022-04-16Vue elementUI表单嵌套表格并对每行进行校验详解2022-04-16如何利用Typescript封装本地存储2022-04-16微信小程序中wxs文件的一些妙用分享2022-04-16JavaScript的Set数据结构详解2022-04-16 其他相关热搜词更多phpjavapython程序员load

若转载请注明出处: 浅谈利用Angular指令怎么保持关注点分离?
本文地址: https://pptw.com/jishu/592267.html
httpHelper 从URL获取值的实例代码 契约类相关的序列化与反序列化实例详解

游客 回复需填写必要信息