2

在我的 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”仍然存在(意味着数组没有重置)。

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


如果它有用:

.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
    };
})
4

1 回答 1

1

假设您想要一个键值存储系统,您可以简单地使用对象而不是数组,以便可以将每个键设置为该对象的属性。

.factory('StorageService', function($localStorage) {
    $localStorage = $localStorage.$default({
        things: {}
    });

    var _getAll = function() {
        return $localStorage.things;
    };
    var _addByKey = function(thing, value) {
        $localStorage.things[thing] = value;
    }

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

但是,假设您希望保留对主集合上所有值的引用并通过键访问它们,您可以考虑使用对象来存储things数组的 intead。这样您就可以使用一个属性来存储所有项目(您也可以存储在不同的地方),并通过将 引用到您的集合中的所需值来使用此对象来存储您的密钥。

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

你的工厂看起来像这样:

.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
    };
})
于 2016-11-14T11:58:53.633 回答