AngularJs资源节约/缓存

AngularJs资源节约/缓存,angularjs,rest,Angularjs,Rest,AngularJs中保存或缓存临时资源结果的最佳方法是什么,以便在不反复请求服务器中相同资源的情况下获得需要资源结果的多个指令 假设有5条指令,它们都需要资源的结果 这将返回帐户的json(RESTAPI GET方法) 最好的做法是缓存此资源的结果或将其保存到变量,然后每个指令从该变量获取数据,并避免每1分钟多次命中rest API(因此缓存在1分钟内过期) 非常感谢。有几种方法可以实现这一点,但一种简单的自包含方法如下: app.factory('myFactory', function($

AngularJs中保存或缓存临时资源结果的最佳方法是什么,以便在不反复请求服务器中相同资源的情况下获得需要资源结果的多个指令

假设有5条指令,它们都需要资源的结果

这将返回帐户的json(RESTAPI GET方法)

最好的做法是缓存此资源的结果或将其保存到变量,然后每个指令从该变量获取数据,并避免每1分钟多次命中rest API(因此缓存在1分钟内过期)


非常感谢。

有几种方法可以实现这一点,但一种简单的自包含方法如下:

app.factory('myFactory', function($http) {
  var THRESHOLD = 60000; // 60 seconds
  var request = null;
  var timestamp;

  var service = {
    getResource: function() {
      var now = new Date().getTime();

      // only make a request if we haven't made one yet
      // or if its been longer than 60 seconds since the last request
      if(request === null || timestamp && now - timestamp > THRESHOLD) {
        timestamp = now;
        request = $http.get('http://some.service.com/resource');
      }

      // we're always returning a promise, once its resolved any service that
      // calls getResource won't have to wait for the request unless its been
      // over 60 seconds since the last one.
      return request;
    }
  }

  return service;
});

这里的基本演示(稍作修改以模拟http请求):

服务是否可能以某种方式返回真实数据而不是承诺?我希望在控制器中这样做:$scope.data=myFactory.getResource();而不是myFactory.getResource().then(函数(数据){$scope.data=data;});为此,如果您使用的是ui路由器或ngRoute,则可以设置解析。请参见此处的示例:我可以在指令中使用resolve吗?目标是在指令内获得资源结果啊,不幸的是,我不知道指令的
解析
,尽管看起来有很多人想要这样的东西:。你可以有一个加载微调器或其他东西,直到承诺得到解决为止——这并不理想,但可能是一个不错的折衷方案。