2014-03-12 83 views
1

我的previous question在我的服務中突出顯示了緩存的可能性。

documentation for ngResourcev1.3.0-build.2417(快照)在撰寫本文時)顯示了一個cache標誌。

但是,只有在第一次調用service.get(id)後纔會填充緩存。我希望能夠使用從其他地方檢索到的項目預先填充資源緩存

(從2+端點獲得相同的項目是完全合理的,例如,您可以在/task/5並且在/projects/99/tasks集合的一部分,如果任務5項目99)

我已經試過這種的一部分,但它是非常難看:

// return the API in the project service 
return { 
     project: null, // my own hand-rolled cache 

     get: function (id) { 

      // check cache 
      if (this.project != null && this.project.id == id) { 
       console.log("Returning CACHED project", this.project); 
       var future = $q.defer(); 
       future.resolve(this.project); 
       // UGLY: for consistent access in the controller 
       future.$promise = future.promise; 
       return future; 
      } else { 
       return Projects.get({ 
        id: id 
       }); 
      } 
     }, // etc 

和Controller:

$q.when(projectService.get($routeParams.id).$promise).then(function(project) { 
    // etc 

如何使用AngularJS成語預先填充緩存?

回答

0

您可以手動將緩存值放入緩存工廠。注入$ cacheFactory,獲取http緩存,並將該對象放入緩存中,其中鍵爲資源的路徑。

例如:

var task = { 
    // ... task object here ... 
}; 

var httpCache = $cacheFactory.get('$http'); 
httpCache.put('/projects/99/tasks/5', task); 
httpCache.put('/task/5', task); 

有一點需要注意,如果你在你的資源設置爲true緩存標誌,它會默認使用$ HTTP緩存。您也可以將其設置爲自定義的cacheFactory實例。在這種情況下,您只需將該值添加到自定義緩存中即可。