最近我和一些同事正在讨论 AngularJS 服务是否应该有状态。我们提出了一些支持和反对它的论据,我想获得关于这个主题的更多想法和反馈。在我的搜索中,我找到了 this但似乎没有提到任何明确的最佳实践。在无客户端的世界中,服务永远不应该保持状态,但我开始认为它可能是可以接受的客户端,因为它是一个不同的问题。
服务保持状态的原因:
服务不保持状态的原因:
可能解决“保持状态的服务”部分中#2 的一种方法是在包含应用程序当前状态的 rootScope 上设置一个 appState 对象。然后所有状态都将聚集在一个位置,然后您只需在您的服务中从中提取您需要的东西。我发现了这个并想知道
请您参考如下方法:
在 AngularJS 中,服务 are passed in via factory function .基本上它们是可以包含某种状态的对象(例如,用于缓存或存储执行其操作所需的数据)。
一种可以同时兼顾有/没有状态的好解决方案是当服务(实际上可能是函数)返回包含状态的对象时。
看看$http
服务:您可以获得此服务调用的实例
var x = $http({url:'...'});
然后调用
var result = x.get() //actually `$http.get` is shortcut of this operation
同
ngResource
:使用服务,您可以获得具有某种状态的对象,可以执行所需的操作。
所以基本上我认为这是最好的选择:从一个 Angular 来看,您可以通过将可以通过操作修改的状态移动到单独的对象中来避免“副作用”,而不是存储在服务本身中,但可以在该对象中具有特定状态以便能够存储自定义信息(如身份验证信息等)。