使用ngStorage / localstorage保存key =>值样式

时间:2016-11-14 11:05:34

标签: javascript ionic-framework local-storage ng-storage

在我的Ionic应用程序中,我添加了插件'ngStorage',它附带了一些演示代码:

var add = function (thing) {
    $localStorage.things.push(thing);
}

这完全按照说明工作。我add("foo"),并getAll(),价值就在那里。我删除add(),但保留getAll(),我仍然有值“foo”(正如预期的那样)。

这对我来说不是很有用,我想用密钥访问它,所以我做了以下内容:

var addByKey = function (key, value) {
    $localStorage.things[key] = value;
    // Or, I've also tried:
    $localStorage.things.key  = value;
}

当我执行addByKey("foo","bar")然后getAll()时,我会完全按照我的意愿获取值。当我删除addByKey()并重新加载时,我希望它仍然记住设置信息,但它不存在。但是,通过add()函数的第一次尝试仍然存在,“foo”仍然存在(意味着数组没有重置)。

如何制作key->值类型的结构?

如果它有用:

.factory ('StorageService', function ($localStorage) {
    $localStorage = $localStorage.$default({
        things: []
    });
    var _getAll = function () {
        return $localStorage.things;
    };

    var _add = function (thing) {
        $localStorage.things.push(thing);
    }
    var _addByKey = function (thing, value) {
        $localStorage.things[key] = value;
        // Or, I've also tried:
        $localStorage.things.key  = value;
    }

    return {
        getAll: _getAll,
        add: _add,
        addByKey: _addByKey
    };
})

1 个答案:

答案 0 :(得分:1)

假设您需要一个键值存储系统,您只需使用一个对象而不是一个数组,这样每个键都可以设置为该对象的属性。

things

但是,假设您希望保留主集合上所有值的引用并通过键访问它们,您可以考虑使用对象来存储数组的.factory('StorageService', function($localStorage) { $localStorage = $localStorage.$default({ things: { items: [] } }); var _getAll = function() { return $localStorage.things.items; }; var _add = function(thing) { $localStorage.things.items.push(thing); } var _addByKey = function(thing, value) { var i = $localStorage.things.items.push(value) - 1; $localStorage.things[thing] = $localStorage.things.items[i]; } return { getAll: _getAll, add: _add, addByKey: _addByKey }; }) intead。这样您就可以使用属性来存储所有项目(您也可以存储在不同的位置),并使用此对象通过引用您的集合中的所需值来存储您的密钥。

  

您可能需要实现删除逻辑以维护集合和字典之间的一致性。

你的工厂看起来像这样:

from multiprocessing.pool import Pool

def _looop(dict_obj):
    _process_sensor(**dict_obj)

to_process = []
for sensor_id in today_values:
    to_process.append(copy.deepcopy({'fields': True,
                         'for': True,
                         '_process_sensor': True}))
pool.map_async(_looop, to_process)