角度:如何刷新服务数据

Angular: How to go about refreshing service data

本文关键字:刷新 服务 数据 何刷新 角度      更新时间:2023-09-26

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

我计划将此类数据存储在服务中。例如,我计划有一个用户服务,所有需要用户数据的控制器都将注入该服务。

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

不过,我很难想象这种模式。我的意思是:

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

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

3) 控制器与服务和过滤器交互的模式是什么?控制器是否只是从服务请求数据并在控制器中筛选数据?另一个选项是让服务执行筛选。如果是这样,我如何向服务传达我需要执行的筛选类型?

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

提前谢谢。

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

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

回答第3点。您可以在控制器内部或视图中应用过滤器(不推荐)。您还可以在服务中拥有一个函数,您可以在其中传递过滤器或过滤器参数并获取用户集合的过滤副本(因为您将同时在许多控制器中直接使用用户集合,因此您不应该修改它,除非需要)。如果在控制器中一次又一次地重复使用相同的筛选器,则可以为每个筛选器提供一个函数,该函数使用"硬编码"筛选器返回筛选的集合。您甚至可以在服务中使用帮助程序功能来帮助您组装复杂的过滤器或已经过滤了集合的多个副本(如果您发现您一次又一次地使用相同的过滤器)