可以使用另一个 angular 的服务吗?

Is it okay to use one angular service from another?

我有 2 个服务和 1 个组件:

服务

组件

ProductService.postProduct 方法向 API 端点发出 POST 请求,需要 token 参数,该参数可以通过 AuthService.get_token() 方法获得。 ProductService需要在ProductSubmitComponent中使用才能提交新产品。

有两种方法可以做到这一点

1。 ProductService 导入并使用 AuthService 获取令牌,而 ProductSubmitComponent 不必关心将 token 作为显式参数传递。

2。 ProductService.postProduct 方法将 token 作为显式输入参数,在请求服务方法时必须由 ProductSubmitComponent 作为附加参数提供。

这两种方法都应该可行,但我的困境是,我应该采用哪一种?这个问题有效地归结为:

是否可以在另一个 中使用一个 angular 服务与仅从 directives/components 而不是其他服务严格使用 服务?

我觉得要看情况。如果您认为您也打算在其他组件中使用 ProductService.postProduct 方法,那么 ProductService 导入 AuthService.

会更有效

据我所知,在一项服务中使用另一项服务并不是坏习惯。我很确定你的 AuthService 注入了 Http 服务,这基本上是一样的:)

只要你有一个有意义的、有据可查的依赖注入层次结构,我就会简单地注入所有东西。在较长的 运行 中,这将使测试更容易,因为有众所周知的依赖项,您可以在其中一目了然地看到需要提供或模拟的内容。

你应该问问自己,你是否需要组件中的令牌。

如果不是,那么组件不应该关心实现细节 - 毕竟它想要的只是 post 一个产品。因此,如果 ProductService 可以自己获取令牌,那么它应该这样做。

还有...

  • ...在单元测试中模拟该服务更容易
  • ...到处都没有重复代码

我认为一个服务可以依赖另一个服务很好。

但是,我个人会考虑让 AuthService 能够更改默认请求 headers,以便它在您的 API 的每个请求中自动包含令牌,如果您没有做跨域请求。

保持每个服务松散耦合是最佳编码实践。你的第二种方式符合它。如果您应用第一种方法,那么 ProductService 将紧密耦合。