Удаление объекта в AngularJS

0

У меня есть объект $ rootScope в AngularJS следующим образом:

$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] я получаю правильный объект, который хочу удалить. Я также попробовал сращивание, но это вызывает ошибку, как я думал. Какие-либо предложения? Благодарю.

Теги:
object
angularjs-rootscope

1 ответ

5
Лучший ответ

Измените объект на массив объектов, затем перейдите в индекс объекта, который вы хотите удалить:

$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>

РЕДАКТИРОВАТЬ

Если вам нужно сохранить данные как объект, работать будет сложная структура данных, поскольку идентификатор каждого объекта на самом деле не является идентификатором, а объектом с именем и возрастом. Таким образом, я действительно не знаю, удастся ли удалить весь объект. Вы можете удалить имя и возраст, но без уникального идентификатора для всего объекта, я не знаю, как вы могли бы удалить сам объект.

  • 0
    Да, я уверен, что это будет работать, но я все еще хочу знать, почему удаление не работает, если я хочу сохранить его как объект, а не как массив.
  • 0
    Именно в этом ответе, но не в том, как мой код настроен. Это один большой объект. когда я проверяю angular.isArray($rootScope.stuff); Я получаю ложь. И я также получаю TypeError: $rootScope.stuff.splice is not a function когда я пытаюсь использовать соединение.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню