可以使用另一个 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
将紧密耦合。
我有 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
将紧密耦合。