【问题标题】:Removing an object in AngularJS在 AngularJS 中删除一个对象
【发布时间】:2015-09-12 16:25:30
【问题描述】:

我在 AngularJS 中有一个 $rootScope 对象,如下所示:

$rootScope.stuff = {
    someId: {
        name: "Patrick",
        age: 105
    },
    anotherId: {
        name: "Joseph",
        age: 94
    }
};

我定义了一个将对象添加到 $rootScope.stuff 的函数,它工作正常:

$rootScope.addSomeStuff = function(id, data) {
    $rootScope.stuff[id] = data;
};

但是,我也有一个尝试删除的功能(基于https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete),但它不起作用:

$rootScope.deleteStuff = function(id) {
    delete $rootScope.stuff[id];
};

当我检查$rootScope.stuff[id] 时,我得到了我想要删除的正确对象。我也尝试过拼接,但这会引发我认为的错误。有什么建议?谢谢。

【问题讨论】:

  • 你能告诉我你为你的拼接功能做了什么吗?
  • 当然。 $rootScope.stuff.splice($rootScope.stuff[id], 1); 我收到错误“TypeError: $rootScope.stuff.splice is not a function.”
  • 为什么你认为它不起作用?有错误吗?
  • 只是为了确认-您将要传递给删除方法的参数命名为“id”,但实际上传递的是要删除的对象的索引,对吗? $rootScope.deleteStuff = 函数(索引)
  • Splice 仅适用于数组,对吗? $rootScope.stuff 只是一个对象。

标签: javascript angularjs object angularjs-rootscope


【解决方案1】:

将对象改为对象数组,然后传入要删除的对象的索引:

$rootScope.stuff = [
    someId: {
        name: "Patrick",
        age: 105
    },
    anotherId: {
        name: "Joseph",
        age: 94
    }
];



$rootScope.deleteStuff = function(index) {
    delete $rootScope.stuff[index];
};

HTML(假设这是通过 ng-repeat 呈现的):

<button ng-click="deleteStuff($index)"></button>

编辑

如果您需要将数据保存为对象,这将是一个难以处理的数据结构,因为每个对象的 ID 实际上不是 ID,而是一个带有名称和年龄的对象。所以,我实际上不知道是否可以删除整个对象。您可以删除名称和年龄,但没有整个对象的唯一标识符我不知道您将如何删除对象本身。

【讨论】:

  • 是的,我确信这会起作用,但我仍然想知道如果我想将它保留为对象而不是数组,为什么 delete 不起作用。
  • 在这个答案中,但不在我的代码设置中。这是一个大对象。当我检查angular.isArray($rootScope.stuff); 时,我得到了错误。当我尝试使用 splice 时,我也会收到 TypeError: $rootScope.stuff.splice is not a function
  • 对于您使用点符号来标识要删除的键的值的对象,例如“delete stuff.someId.name” - 但由于您没有对象的实际 ID你正在删除它可能无法删除。
猜你喜欢
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 2020-10-30
  • 2012-01-08
  • 2011-01-21
相关资源
最近更新 更多