AngularJS - 在服务中存储数据?

时间:2015-09-30 17:09:05

标签: javascript angularjs

假设我有一个调用外部API的用户服务

为了避免两次调用此API(例如,一次用于父页面,然后再次用于需要它的任何子元素)。

将数据存储在服务中是否可以?

e.g。 myService.userNamemyService.userID

我已经读到将数据存储在服务中的不良做法; 这就是为什么我要问

注意:我不需要数据持久化。它应该在页面加载时刷新。

3 个答案:

答案 0 :(得分:1)

我认为在服务中缓存数据有几个优点,但你必须知道实际发生了什么。

以下是有关服务的一些事实和信息:

  • 他们是单身人士,这意味着整个申请中只有一个实例
  • 服务始终存在(您无需明确创建)
  • 服务可以缓存可能有用的数据,例如,维护视图/页面的状态和/或减少发送到服务器的请求数量
  • 服务可用于在不同组件之间交换数据(例如指令,控制器,其他服务等)。
  • 可以在任何需要的地方轻松注入服务
  • 可以在没有任何UI相关问题的情况下测试服务。

在某些情况下,您可能需要注意力度:

  • 如果不同的组件共享和修改相同的服务,它们可能会“混乱”彼此的数据 - 这可能是期望的,但也可能有一些副作用
  • 只要应用程序“存在”,
  • 服务显然只会缓存,即如果用户重新加载或重新访问该页面,则数据/状态将丢失。如果要保留数据,可以将服务的数据存储在本地存储中,例如。

我认为如果服务具有清晰易懂的API并且不会尝试做太多,那么服务就很好。如果它可以被几个组件重用,这似乎符合您的要求。

请注意,其中一些内容是从我的answer复制到有关服务与指令的其他帖子中的。也许你可以在那里找到更多的信息。

答案 1 :(得分:0)

您可以在服务中缓存您的数据...但您应该使用服务器&客户端检查所以没有人会编辑它并将更改那里的信息。

每当你进入一个网站时,作为一个客户,你应该回答一次,这个问题不会发生很大变化。例如,如果用户详细信息在下一分钟内没有发生变化,则应该发出一次。

将信息存储在服务中是一种常见的选择,另一种选择是本地存储和/或cookie,这将在您下次进入时有所帮助,如果它再次变化不大。

答案 2 :(得分:0)

服务中的缓存没有任何问题(它们是单例,通常用于在控制器之间共享状态。)如果您使用$ resource从您的服务访问API,则一个选项是只需打开$ resource的内置缓存,就像这样:

var myResource = $resource(baseUrl + '/something/:id', {id: '@id'}, {
        'get': { method:'GET', cache: true},
    });