Angular2 的服务应该是无状态的吗?

Are Angular2's services supposed to be stateless?

我来自 Java 服务通常意味着无状态的世界。 Angular2 中的服务也应该是无状态的吗?或者我们可以简单地存储状态,因为我们不必像 Java 示例中那样关心并发线程访问吗?

在 AuthService https://angular.io/docs/ts/latest/guide/router.html#!#teach-authguard-to-authenticate 中存储状态 class。

这只是为了简化示例还是常见做法?我知道服务在声明它们的范围内被实例化并存在,但这意味着我将不得不关心服务的提供位置以了解状态持续多长时间。

让组件无状态并将状态存储在服务中通常是个好主意,尤其是在路由器添加的组件中,这样导航离开和稍后返回路由时就不会丢失数据。

因此对于你的问题: 服务不应该是无状态的。他们通常是,但这不是必需的。

您可以使用 NGRX Store 来存储状态,但这也是一项服务。

I would have to care where the service has been provided to know how long the state lasts.

是的,这就是您必须要做的。这通常很容易。如果您希望服务及其状态在整个应用程序生命周期内可用,您可以在 @NgModule() 中提供它(需要对延迟加载模块进行一些特殊处理),否则您在组件中提供它,并且在服务将随着组件实例被销毁而结束。