Angular 服务与导出

2024-02-01

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

使用注射服务有什么优势吗:

@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 {
   …
}

…

我正在开发一个混合这两种方法的应用程序,但我对彼此的优势感到困惑。


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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 服务与导出 的相关文章

随机推荐

  • 将三个不同的列合并为 R 中的日期

    现在 我在 R 的数据文件中有 3 个单独的列 分别为年 月和日 如何将这三列合并为一列并使 R 理解它是日期 这是现在的样子 year mon day gnp 1947 1 1 238 1 1947 4 1 241 5 1947 7 1
  • Elasticsearch 在显示 t: failed to read local state , exiting 后崩溃

    我是 Elasticsearch 的新手 我在本地只运行一个节点 到目前为止 它运行良好 现在一启动就崩溃了 错误堆栈如下 C MyApps elasticsearch6 5 1 elasticsearch oss 6 5 1 elasti
  • 在 bash 中从占据终端整个宽度的破折号字符绘制一条水平线

    我需要一个命令来在终端中绘制一条水平 线 该线必须恰好等于终端长的宽度 无论当前终端宽度如何 并且由破折号字符组成 尽管也可以使用水平线的 unicode 符号 如果能上色就更好了 我需要像这样使用它 echo some text draw
  • WCF:OperationContext.IncomingMessageProperties.Via 返回错误的 URI

    我在 IIS 中托管 WCF 服务 我在 IIS 中为该站点设置了多个主机名绑定 但是 当向任何非默认绑定发出请求时 OperationContext IncomingMessageProperties Via 属性不会报告正确的 url
  • 如何加载共享库而不加载其依赖项?

    说我有一个图书馆libfoo so 1 这取决于 根据ldd on libbar so 1 然而 libbar so 1目前不可用 我的应用程序需要调用一个函数libfoo so 1这不需要libbar so 1 at all 有没有办法加
  • 局部变量的内存可以在其作用域之外访问吗?

    我有以下代码 include
  • 使用Servlet API,如何确定请求是HTTP/1.0还是HTTP/1.1?

    我正在修复一个错误 该错误仅在客户端使用 HTTP 1 0 并且是在防火墙后面秘密地进行 Internet Explorer 代理 时才会显现出来 详细信息在这里 https issues apache org jira browse TA
  • 获取日期中的小时和分钟 (HH:MM)

    我只想得到hh mm从日期 我怎样才能得到这个 我已经尝试过这个 CONVERT VARCHAR 8 getdate 108 只需使用前 5 个字符 SELECT CONVERT VARCHAR 5 getdate 108
  • 在 Java 中,在被调用方法之前和之后运行方法

    我正在尝试编写一个 Java 程序 以便在调用方法A 首先是一个名为methodBeforeA 被调用 然后方法A 执行后 另一个方法被调用命名 方法AfterA 这与 Junit 使用注释 使用 Before Test After 所做的
  • python mechanize 处理两个同名参数

    我正在登录一个页面 其中奇怪地有一个名为的表单输入login email和两个表单输入称为login password 我需要设置两者的值 但直接调用form login password 抛出错误 File Library Python
  • 将整数向量转换为 0 到 1 之间浮点数的最快精确方法

    考虑一个随机生成的 m256i向量 有没有更快 更精确的方法将它们转换为 m256之间的浮点数向量0 包括在内 和1 仅 比除以float 1ull lt lt 32 这是我到目前为止所尝试过的 其中iRand是输入和ans是输出 cons
  • 当线程“等待”某些东西时会发生什么

    When an async method awaits a Task当前正在运行的线程会发生什么 我推测 在 UI 线程上 消息循环将恢复 而在线程池线程上 线程将被释放回线程池 但是如果手动启动线程会发生什么呢 还有其他类型的线程吗 我花
  • 强制删除 boost::signals2 中的槽

    我发现 boost signals2 使用某种连接槽的惰性删除 这使得很难使用连接来管理对象的生命周期 我正在寻找一种方法来强制在断开连接时直接删除插槽 任何有关如何通过以不同方式设计我的代码来解决问题的想法也将受到赞赏 这是我的场景 我有
  • 在 FluentAssertions 中自定义失败处理

    我尝试使用 FluentAssertions 不仅作为测试断言框架 而且还检查运行时契约 例如高级 Debug Assert 并且我已阅读this https stackoverflow com questions 49724379 sho
  • 空手道 - 如何在 java 文件中使用 karate-config.js 变量?

    我有一个 DB utils java 文件 我需要根据运行代码的环境加载数据库用户名密码 并且需要从 karate config js 导入这些环境值 如何实现这一目标 只需使用嵌入表达式即可 所以如果你有dbusername and db
  • Python 多处理:如何在错误后干净地退出?

    我正在编写一些使用的代码multiprocessing模块 然而 由于我是新手 经常发生的情况是弹出一些错误 导致主应用程序停止运行 但是 该应用程序的子级仍然保持运行 并且我得到一长串正在运行的列表pythonw我的任务管理器列表中的进程
  • 在 varchar 列中查找非数字值

    要求 通用查询 函数 用于检查表中 varchar 列中提供的值是否实际上是数字且精度不超过允许的精度 可用值 表名称 列名称 允许的精度 允许的小数位数 一般建议是创建一个函数并使用 to number 来验证该值 但它不会验证允许的长度
  • 如何在 Android 键盘上添加“下一步”

    我在某些应用程序中看到键盘中出现一个名为 next 的按钮 它将焦点放在下一个编辑文本上 我想将其添加到我的应用程序中 你知道我该怎么做吗 或者它仅在应用程序的键盘上 多谢 抱歉 我没有这方面的更多信息 在edittext的布局中添加and
  • C/C++ 中结构体的字段对齐

    结构体的成员是用 C C 封装的吗 我所说的打包是指它们是紧凑的 并且字段之间没有内存空间 这不是对齐的意思 并且不保证任何特定的对齐或打包 元素将按顺序排列 但编译器可以在其选择的位置插入填充 这其实creates 有用的 对齐 例如 对
  • Angular 服务与导出

    我有一组简单的工具方法 没有任何状态可以在应用程序中共享 不需要是单例 也不需要任何注入的服务 使用注射服务有什么优势吗 Injectable export class DateService public convertStringToD