AngularJS / JavaScript从Localstorage数组中删除特定元素

时间:2015-02-18 16:31:53

标签: javascript arrays angularjs

我的LocalStorage中有一个数组,我使用ngStorage进行操作。 我试图从那里删除项目,但当我使用

$localStorage.someArrayName.splice(id, 1);

只有第一个删除的项目正常工作,然后按照我的意愿删除停止工作。

我也试过这样的事情:

        if (id === $localStorage.someArrayName.length) {
            $localStorage.someArrayName.pop();
        }

        else if (id === 0) {
            $localStorage.someArrayName.shift();
        }

        else {
            $localStorage.someArrayName.splice(id, 1);
        }

但是我得到了更多错误的结果

我尝试了https://github.com/gsklee/ngStorage中的示例:

delete $localStorage.someArrayName[id];

但它删除了值,我在本地存储阵列中得到null,null,null值。然后我甚至得到关于重复值的重复错误:

  

错误:[ngRepeat:dupes]不允许在转发器中复制...

我无法处理它。我不确定这是一个小问题还是我做了一些根本错误的事情。你能给我一些指导吗?提前谢谢!

这就是我的数组在localstorage中保存的样子:

[{"content":"something"},{"content":"else"}] //etc...

1 个答案:

答案 0 :(得分:3)

所以你正在使用ng-repeat来做某事,你的id就在那里。如果您从数组中删除项目时使用 $ index 作为 id 参数的值,则您的数组编号不再相同且 id 不是你所期望的。

您也不需要pop()和shift()方法。

假设你的ng-repeat是这样的:

<element ng-repeat="item in someThing">
    {{item.prop}} <childelem ng-click=delete($index)>delete</childelem>
</element>

如果您的功能是:

$scope.delete = function (id) {

    $localStorage.someArrayName.splice(id, 1);

};

然后你需要这样的东西:

<element ng-repeat="item in someThing">
    {{item.prop}} <childelem ng-click=delete(item)>delete item</childelem>
</element>

$scope.delete = function (item) {

   $localStorage.someArrayName.splice($localStorage.someArrayName.indexOf(item), 1);

};

这将删除整个{"content":"something"} 从你的阵列。

不知道这是否是问题的正确方向,如果这是情景,但我希望它会对你有所帮助。最好的问候!