Javascript 角度:如何刷新服务数据

Javascript 角度:如何刷新服务数据,javascript,angularjs,service,Javascript,Angularjs,Service,我是Angular的新手,正在尝试构建Angular应用程序。 我有很多数据需要在整个应用程序中由多个控制器使用。据我所知,这是使用服务的最佳情况 我计划将此类数据存储在服务中。例如,我计划拥有一个用户服务,所有需要用户数据的控制器都将注入该服务 我希望users服务保存用户的主列表和任何需要用户只使用服务列表的一个实例的控制器 不过,我很难想象这种模式。我的意思是: 1让服务从服务器刷新数据的标准方式是什么?我意识到我可以每10秒从服务器请求一次完整的用户列表,但这似乎有点沉重 2理想情况下,

我是Angular的新手,正在尝试构建Angular应用程序。 我有很多数据需要在整个应用程序中由多个控制器使用。据我所知,这是使用服务的最佳情况

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

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

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

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

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

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

我认为,通过使用某种坚实的模式,我可以处理很多这些问题,我相信还会出现更多问题。只是想了解一下人们在使用单例服务时使用的一些常见模式


提前感谢。

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

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


对第3点的答复。您可以在控制器内部或在不推荐的视图中应用过滤器。您还可以在服务中使用一个函数,在该函数中传递过滤器或过滤器参数并获取用户集合的过滤副本,因为您将同时在多个控制器中直接使用用户集合。除非需要,否则不应修改该函数。如果在控制器之间反复使用相同的过滤器,则可以为每个过滤器使用一个函数,该函数返回带有硬编码过滤器的过滤集合。您甚至可以在服务中使用helper函数来帮助您组装复杂的筛选器,或者让集合的多个副本已被筛选缓存。如果您发现您反复使用同一个筛选器,问题实际上取决于对原型继承的理解。一旦您认识到这一点,使用var a=[];var b=a只有一个数组,每个变量引用同一个数组,服务共享更容易理解。服务可以被告知以设置的间隔更新该阵列,控制器不必做任何事情来保持最新状态