2016-07-05 69 views
0

我創建了一個通過$ http.get()獲取的服務。

我的服務用於呈現多個UI元素的指令。該服務是異步的。它在指令代碼中使用,如:myService.getStuff(),它返回一個自定義的承諾(從$ http.get承諾的回調中)。

但我希望我的服務在應用程序的生命週期中僅對$ http.get執行一次調用。並緩存http.get響應。

所以說我在我的html中使用指令2次。然後這就是我想要的:第一次調用它(立即返回)並通過$ http.get獲取內容。第二次被調用時,它檢測到對$ http.get的未完成調用。因此不會對$ http.get進行另一個調用,但以某種方式等待第一個調用的返回。

回答

2

您可能需要使用內部$http

return $http.get(/*...*/, { cache: true }).then(/*...*/); 

cache或只是緩存在您的服務承諾。

function MyService($http) { 
    var promise; 

    this.get = function() { 
     promise = promise || $http.get(/*...*/).then(/*...*/); 
     return promise; 
    } 
} 

如果您使用uirouter,另一種方式是resolve在父狀態數據,並注入所解析數據到所有組件。

+0

函數內部有一個虛假的額外'var'。它只需要作爲外部'promise'變量的賦值。 – Duncan

+0

@Duncan thx,編輯 – hansmaad

+0

所以設置緩存:真,不會在我的情況下工作,因爲我想避免調用$ http.get(),而不管它是否內部緩存響應。 但是,當你寫緩存時,我的服務中的承諾可能更多。這意味着我會多次返回相同的承諾,並在每次調用服務時爲其設置不同的回調函數。這很好嗎? –

0

設置cachetrue這樣的:

$http.get(yourUrl, {cache: true}) 
    .then(...) 

這個任何後續調用將使用緩存的值。

相關問題