如何避免多次执行服务的查询(get)?

时间:2014-09-13 07:48:01

标签: javascript angularjs caching

我的服务看起来如下:

var chatServices = angular.module('chatServices', ['ngResource']);

chatServices.factory('Chat',['$resource',
  function($resource){
    return $resource('sample-chat-data.json', {}, {
      query: {method:'GET', params:{}, isArray:true}
    });
  }
]);

我有两个控制器,一个用于主控制器,一个用于详细视图:

  chatListApp.controller('ChatItemsController', ['$scope', 'Chat', "$location",
    function ($scope, Chat, $location) {
      $scope.chatitems = Chat.query();
      $scope.detailPage = function (hash) { 
        $location.path(hash);
      }
    }]);

  chatListApp.controller('ChatDetailController', ['$scope', "$routeParams", "Chat",
    function ($scope, $routeParams, Chat) {
      $scope.chatID = $routeParams.chatID; 
      $scope.chatitems = Chat.query(function() { 
        for (var i = 0; i < $scope.chatitems.length; i++) { 
          if ($scope.chatitems[i].id === $scope.chatID) { 
            $scope.chat = $scope.chatitems[i]; 
            break; 
          } 
        };
      });
    }]);

我觉得我的代码远非最佳,原因是我做了两次相同的查询。有一种聪明的方法吗?我可以以某种方式将我的服务结果保存/缓存到变量吗?

您可以在那里看到完整代码和SPA的在线工作示例:https://github.com/gkatsanos/angular-demo

1 个答案:

答案 0 :(得分:0)

开启缓存

chatServices.factory('Chat',['$resource',
  function($resource){
    return $resource('sample-chat-data.json', {}, {
      query: {method:'GET', params:{}, isArray:true,cache : true}
    });
  }
]);