美文网首页F2e踩坑之路
移动端(h5),缓存数据sessionStorage

移动端(h5),缓存数据sessionStorage

作者: 谷维陌 | 来源:发表于2018-03-05 15:27 被阅读7次

    在项目中遇到需要缓存数据,后退时把数据还原.
    项目中使用了angularJS v1.6.6

    // 获取当前数据
    angular.module('app').service('oaSession', function() {
        // 存储数据
        // key:存储的字段, data:存储的数据, equalStr:存储的判断语句, callback:存储的回调
        this.setValue = function(key, data, equalStr, callback) {
            var listArr = [];
            if (sessionStorage.getItem(key) != undefined) {
                listArr = JSON.parse(sessionStorage.getItem(key));
                var hasObj = false;
                for (var i = 0; i < listArr.length; i++) {
                    // 判断是否在当前的存储数据中
                    if (eval(equalStr)) {
                        // 存在当前存储数据中时,执行回调,更新所需要的数据。
                        angular.isFunction(callback) && callback(listArr[i]);
                        hasObj = true;
                        break;
                    }
                }
                // 当前的存储数据没改数据时,直接加到存储数据中
                if (!hasObj) {
                    listArr.push(data);
                }
            } else {
                listArr.push(data);
            }
            sessionStorage.setItem(key, angular.toJson(listArr));
        }
    
        // 获取存储的数据
        // key:存储数据的字段, equalStr:获取存储数据的判断语句
        this.getValue = function(key, equalStr) {
            var hasShow = false;
            var returnData = {
                hasShow: false,
                listData: []
            }
            if (sessionStorage.getItem(key) != undefined) {
                var listArr = angular.fromJson(sessionStorage.getItem(key));
                for (var i = 0; i < listArr.length; i++) {
                    // 判断是否在当前的存储数据中
                    if (eval(equalStr)) {
                        // 获取该数据, 并返回值
                        returnData.listData = listArr[i];
                        returnData.hasShow = true;
                        break;
                    }
                }
            }
            return returnData;
        }
    })
    

    纯javascript

    // 存储和获取sessionStorage数据
    var sessionFn = function() {
        // 存储数据
        // key:存储的字段, data:存储的数据, equalStr:存储的判断语句, callback:存储的回调
        this.setValue = function(key, data, equalStr, callback) {
            var listArr = [];
            if (sessionStorage.getItem(key) != undefined) {
                listArr = JSON.parse(sessionStorage.getItem(key));
                let hasObj = false;
                for (let i = 0; i < listArr.length; i++) {
                    // 判断是否在当前的存储数据中
                    if (eval(equalStr)) {
                        // 存在当前存储数据中时,执行回调,更新所需要的数据。
                        typeof callback == ‘function’ && callback(listArr[i]);
                        hasObj = true;
                        break;
                    }
                }
                // 当前的存储数据没改数据时,直接加到存储数据中
                if (!hasObj) {
                    listArr.push(data);
                }
            } else {
                listArr.push(data);
            }
            sessionStorage.setItem(key, angular.toJson(listArr));
        }
    
        // 获取存储的数据
        // key:存储数据的字段, equalStr:获取存储数据的判断语句
        this.getValue = function(key, equalStr) {
            var hasShow = false;
            var returnData = {
                hasShow: false,
                listData: []
            }
            if (sessionStorage.getItem(key) != undefined) {
                var listArr = JSON.stringify(sessionStorage.getItem(key));
                for (let i = 0; i < listArr.length; i++) {
                    // 判断是否在当前的存储数据中
                    if (eval(equalStr)) {
                        // 获取该数据, 并返回值
                        returnData.listData = listArr[i];
                        returnData.hasShow = true;
                        break;
                    }
                }
            }
            return returnData;
        }
    }
    

    相关文章

      网友评论

        本文标题:移动端(h5),缓存数据sessionStorage

        本文链接:https://www.haomeiwen.com/subject/wzwcfftx.html