我的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...
答案 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"}
从你的阵列。
不知道这是否是问题的正确方向,如果这是情景,但我希望它会对你有所帮助。最好的问候!