亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在AngularJS中緩存HTTP“獲取”服務響應?

在AngularJS中緩存HTTP“獲取”服務響應?

幕布斯6054654 2019-07-31 14:53:34
在AngularJS中緩存HTTP“獲取”服務響應?我希望能夠創建一個自定義AngularJS服務,該服務在其數據對象為空時發出HTTP“Get”請求,并在成功時填充數據對象。下次調用此服務時,我想繞過再次發出HTTP請求的開銷,而是返回緩存的數據對象。這可能嗎?
查看完整描述

3 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

Angular的$ http 內置了一個緩存。根據文件:

cache - {boolean | Object} - 使用$ cacheFactory創建的布爾值或對象,用于啟用或禁用HTTP響應的緩存。有關更多信息,請參閱 $ http Caching

布爾值

所以你可以在其選項中設置cachetrue

$http.get(url, { cache: true}).success(...);

或者,如果您更喜歡配置類型的呼叫:

$http({ cache: true, url: url, method: 'GET'}).success(...);

緩存對象

您還可以使用緩存工廠:

var cache = $cacheFactory('myCache');$http.get(url, { cache: cache })

你可以使用$ cacheFactory自己實現它(特別是在使用$ resource時):

var cache = $cacheFactory('myCache');var data = cache.get(someKey);if (!data) {
   $http.get(url).success(function(result) {
      data = result;
      cache.put(someKey, data);
   });}


查看完整回答
反對 回復 2019-07-31
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

我認為現在有一個更簡單的方法。這為所有$ http請求啟用了基本緩存($ resource繼承):

 var app = angular.module('myApp',[])
      .config(['$httpProvider', function ($httpProvider) {
            // enable http caching
           $httpProvider.defaults.cache = true;
      }])


查看完整回答
反對 回復 2019-07-31
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

在當前穩定版本(1.0.6)中執行此操作的更簡單方法需要更少的代碼。


設置模塊后添加工廠:


var app = angular.module('myApp', []);

// Configure routes and controllers and views associated with them.

app.config(function ($routeProvider) {

    // route setups

});

app.factory('MyCache', function ($cacheFactory) {

    return $cacheFactory('myCache');

});

現在你可以將它傳遞給你的控制器:


app.controller('MyController', function ($scope, $http, MyCache) {

    $http.get('fileInThisCase.json', { cache: MyCache }).success(function (data) {

        // stuff with results

    });

});

一個缺點是密鑰名稱也會自動設置,這可能會使清除它們變得棘手。希望他們能以某種方式添加關鍵名稱。


查看完整回答
反對 回復 2019-07-31
  • 3 回答
  • 0 關注
  • 605 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號