2015-06-25 2 views
0

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

+0

Не могли бы вы показать мне, что вы сделали для своей функции сращивания? – JohnCooling

+0

Несомненно. '$ rootScope.stuff.splice ($ rootScope.stuff [id], 1);' И я получил ошибку "TypeError: $ rootScope.stuff.splice не является функцией." – psnoonan

+0

Почему вы не думаете, что это работает? Есть ли ошибка? – tymeJV

ответ

5

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

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



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

HTML (предполагается, что это визуализируется с помощью нг-повтора):

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

EDIT

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

+0

Да, я уверен, что это сработает, но я все еще хочу знать, почему удаление не работает, если я хочу сохранить его как объект, а не массив. – psnoonan

+0

Именно в этом ответе, но не в том, как мой код настроен. Это один большой объект. когда я проверяю 'angular.isArray ($ rootScope.stuff);' Я получаю false. И я также получаю 'TypeError: $ rootScope.stuff.splice не функция, когда я пытаюсь использовать сплайс. – psnoonan

+0

для объектов, для которых вы используете точечную нотацию, чтобы идентифицировать значение ключа, которое вы хотите удалить, как этот «delete stuff.someId.name» - но поскольку у вас нет фактического идентификатора для объекта, который вы удаляете, это может быть невозможно удалить его. – jordajm