角度服务与出口

时间:2018-05-30 12:17:39

标签: angular

我有一套简单的工具方法,没有任何状态可以在应用程序中共享,不需要是单例,也不需要任何注入服务。

使用注射服务是否有任何好处:

@Injectable()
export class DateService { 
  public convertStringToDate(input: string): Date {
    …
  }

  public convertDateToString(date: Date): string {
   …
  }
  …
}

与一组简单的导出/导入功能(或基本JS模块)?

export function convertStringToDate(input: string): Date {
    …
}

export function convertDateToString(date: Date): string {
   …
}

…

我正在研究混合这两种方法的应用程序,而且我对彼此的优势感到困惑。

4 个答案:

答案 0 :(得分:4)

如果某项服务没有任何状态,则无需创建该服务。

导出函数的优点是,在构建过程中,如果不使用其中一个函数,则可以删除代码。

如果您的应用程序有多个代码包并且它们是懒惰加载的,并且您在不同的包中使用不同的函数,那么这些函数将与该包一起延迟加载。

如果您确信您的功能将始终独立使用,那么我将采用第二种方法。 RxJS例如由于我所说的原因,我采用了功能方法。

使用服务的一个论点是测试。如有必要,您可以在测试期间轻松注入虚假服务或代理。但我想这对于转换功能来说几乎没有必要。

答案 1 :(得分:1)

在你的情况下,我认为要么比另一个有优势。因为它不需要包含状态,所以没有真正的差异。

如果在应用程序中加入延迟加载,可能会在性能方面有一些优势,因为在需要之前,您不会急切地加载包含该服务的模块。但除此之外,没有。

答案 2 :(得分:0)

@Injectable在多个组件具有conman功能时使用,并且您不想多次声明,只需在@Injectable组件中声明它并使用任何组件。

答案 3 :(得分:0)

如果您只想将日期转换为字符串,我建议您使用JavaScript Date APIAngular DatePipe

无论如何,如果你只需要静态方法,那么使用服务就没有优势。服务用作组件和服务器之间的层,以便检索和对象,存储它们并管理它们。 将辅助函数存储在可以从任何地方访问的额外TypeScript文件中是有意义的。