【问题标题】:Store objects in local storage将对象存储在本地存储中
【发布时间】:2017-09-28 17:59:31
【问题描述】:

您好,在某些函数中,我有将对象 {} 保存到 localForage 的代码,这不过是异步 localStorage

if(vm.convertedColors[vm.convertedColors.length - 1].colorInRGB &&
   vm.convertedColors[vm.convertedColors.length - 1].colorInHSL &&
   vm.convertedColors[vm.convertedColors.length - 1].colorInHEX) {
        $localForage.setItem('colors', {
            inHSL: vm.convertedColors[vm.convertedColors.length - 1].colorInHSL,
            inHEX: vm.convertedColors[vm.convertedColors.length - 1].colorInHEX,
            inRGB: vm.convertedColors[vm.convertedColors.length - 1].colorInRGB
        }).then(function() {
            $rootScope.$emit('localForageUpdated');
        });
}

这在按钮单击并存储对象colors 后运行。它运行良好,但是当我更改颜色并再次单击按钮时,我希望它保存新的 colorsobject 而不是替换它现在的工作方式。

所以我想保存colors1colors2colors3等等。它可以是对象数组。嗬嗬

【问题讨论】:

    标签: javascript local-storage


    【解决方案1】:

    将其保存为数组。然后在保存下一个之前,获取旧值,将新对象推送到它上面,然后保存。

    $localForage.getItem('colors').then(function(colors) {
        colors = colors || []; // initialize as empty array on the first run
        colors.push({
            inHSL: vm.convertedColors[vm.convertedColors.length - 1].colorInHSL,
            inHEX: vm.convertedColors[vm.convertedColors.length - 1].colorInHEX,
            inRGB: vm.convertedColors[vm.convertedColors.length - 1].colorInRGB
        });
        $localForage.setItem('colors', colors).then(function() {
            $rootScope.$emit('localForageUpdated');
        });
    });
    

    【讨论】:

    • 你想在某个地方拥有$localForage.getItem('colors')
    • @BrahmaDev 第一行。
    • 为什么第一行需要getItem?在第一次运行函数时,我不会在缓存中保存任何数据,然后会运行吗?
    • 您需要获取该项目,以便将新对象附加到数组中。第一次将返回nullcolors = colors || [] 行将替换为一个空数组。
    【解决方案2】:

    只需将颜色存储为数组,并在您想要推送新颜色时推送到该数组。然后将数组推回本地存储。

    if (vm.convertedColors[vm.convertedColors.length - 1].colorInRGB &&
        vm.convertedColors[vm.convertedColors.length - 1].colorInHSL &&
        vm.convertedColors[vm.convertedColors.length - 1].colorInHEX) {
    
        $localForage
            .getItem("colors")
            .then((colors) => {
                colors = colors || [];
                colors.push({
                    inHSL: vm.convertedColors[vm.convertedColors.length - 1].colorInHSL,
                    inHEX: vm.convertedColors[vm.convertedColors.length - 1].colorInHEX,
                    inRGB: vm.convertedColors[vm.convertedColors.length - 1].colorInRGB
                });
                return $localForage.setItem("colors", colors);
            })
            .then((err) => {
                if (err) {
                    console.error(err);
                }
                return $localForage.getItem("colors")
            })
            .then((colors) => {
                console.log(colors);
            });
    }
    

    【讨论】:

    • @Andreas 很抱歉,我可能正在同时处理我的答案。要我删除我的答案吗?
    • 有足够的区别,比如返回promise而不是直接调用它,你把它包裹在if中。
    猜你喜欢
    • 2011-08-21
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多