簡體   English   中英

如何避免多次執行服務查詢(獲取)?

[英]How do I avoid a query (get) from a service being executed multiple times?

我提供的服務如下所示:

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

打開緩存

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM