Angular:如何刷新服务数据

时间:2015-03-08 23:19:03

标签: javascript angularjs service

我对Angular很新,并尝试构建一个Angular应用程序。 我有很多数据需要整个应用程序中的多个控制器使用。据我了解,这是使用服务的完美情况。

我打算在服务中存储这种数据。例如,我计划拥有一个用户服务,所有需要用户数据的控制器都会注入。

我希望用户服务保存用户的主列表以及需要用户只使用服务列表的一个实例的任何控制器。

我无法想象这个模式。我的意思是:

1)让服务从服务器刷新数据的标准方法是什么?我意识到我可以从服务器每隔10秒就去请求整个用户列表,但这似乎有点重...

2)理想情况下,我希望只传递每个用户的一个实例。这样,如果在服务中更新,它肯定会在所有控制器中更新。我想另一种选择是让服务每次更新用户时都广播一个事件?或者使用观察者?

3)控制器与服务和过滤器交互的模式是什么?控制器是否仅从服务请求数据并在控制器中对其进行过滤?另一种选择是让服务进行过滤。如果是这样,我如何传达我需要对服务进行的过滤?

我认为通过使用某种固体模式,我可以处理很多这些问题(我确信会出现更多问题)。只是寻找人们在使用单件服务时使用的一些常见模式的建议。

提前致谢。

1 个答案:

答案 0 :(得分:0)

回答第1点。服务只是一个单身人士。如何在其中存储和刷新数据与其性质无关。不确定为什么要在服务中使用所有用户数据(除非您正在构建用户管理应用程序),但您可以使用多种技术,例如轮询(例如,使用$ timeout请求新用户并将其附加到现有用户)或推送(例如,socket.io/signalR将在可用时向您推送新用户的有效负载)。这可以在服务本身内部完成,也可以通过向服务添加/删除数据的控制器完成(例如UI中的刷新用户按钮)

对第2点的回答。您可以使用getter将服务内部数据的引用直接绑定/使用到控制器中,以便立即显示对数据的更改(假设是双向绑定,如果不是使用事件) 。

回答第3点。您可以在控制器内或视图中应用过滤器(不推荐)。您还可以在服务中使用一个函数来传递过滤器或过滤params并获取用户集合的过滤副本(因为您将立即在许多控制器中直接使用users集合,您不应该修改它,除非他们愿意)。如果您在控制器中一次又一次地重复使用相同的过滤器,则可以为每个过滤器提供一个函数,该过滤器使用"硬编码的"过滤。您甚至可以在服务中使用辅助函数来帮助您组装复杂的过滤器,或者已经过滤的集合的多个副本被缓存(如果您发现您一次又一次地使用相同的过滤器)