2

我正在开发一个 Angular 应用程序,它调用服务器并获取 JSON 数据。我正在考虑缓存这个 JSON 数据。

尝试的方法:

1)我尝试使用 html5 localSorage 将数据保存在本地。但是,这样做的问题是,我应该手动设置过期时间,并且无法知道数据会如何偶尔更改。

2)我尝试使用 $cacheFactory ,但是这不会在刷新或页面导航之间缓存数据。

我正在寻找的解决方案,

我希望将数据保存在本地或缓存。并使用某种机制来检测服务器返回的数据是否发生了变化(JSON数据),然后才进行调用。

这有可能吗?

4

1 回答 1

1

我希望您从 html 获取数据,调用 Web 服务并将数据存储在本地存储中。成功调用将数据存储在$http 本地存储中的函数。

setUserDetails = function(userData){
var username = "";
if(userData != null){
app.setInLocalStorage("loginName",userData.userName);}
}

其中 userData 就像一个对象包含您的 html 数据,

var userData= {
 userName : $scope.userName,
 };

userData.userName从本地存储中获取

 var userLoggedIn = app.retrieveFromLocalStorage("userName");

比较数据是否从服务器更改

if(userLoggedIn != null){
            //call the service which gives dynamic response 
            //i hope your saving the success data in userData and userName is property which changes dynamically 
         var newUser = userData.userName;
        if(angular.equals(userLoggedIn, newUser){
             // maintain the same data in localstorage 
                        //or
               //No need to call any other function calls
         }else{    
                  //clear the old data from local storage 
                      app.clearLocalStorage();
                 //storage the new dynamic data in local storage 
                           //or
                  //call the new function calls if you need 
                app.setInLocalStorage("loginName",newUser)
             }
}

在 app.js 文件中包含以下行来存储、检索、清除本地存储

setInLocalStorage : function(key , value) {
            // Check browser support
            if (typeof(Storage) != "undefined")
            {
                // Store
                localStorage.setItem(key , value);
            }
            else
            {
                alert("Sorry, your browser does not support Web Storage...");
            }
        },
       retrieveFromLocalStorage : function(key){
        return localStorage.getItem(key);
    },

    clearLocalStorage : function(){
        localStorage.clear();
    }
于 2014-09-16T08:04:48.063 回答