Простой список дел, но с кнопкой удаления на странице списка для каждого элемента:
Соответствующий шаблон HTML:
<tr ng-repeat="person in persons">
<td>{{person.name}} - # {{person.id}}</td>
<td>{{person.description}}</td>
<td nowrap=nowrap>
<a href="#!/edit"><i class="icon-edit"></i></a>
<button ng-click="delete(person)"><i class="icon-minus-sign"></i></button>
</td>
</tr>
Соответствующий метод контроллера:
$scope.delete = function (person) {
API.DeletePerson({ id: person.id }, function (success) {
// I need some code here to pull the person from my scope.
});
};
Я попробовал $scope.persons.pull(person)
и $scope.persons.remove(person)
.
Хотя база данных успешно удалена, я не могу вытащить этот элемент из области и не хочу вызывать метод на сервере для данных, которые уже есть у клиента, я просто хочу удалить этого человека из области.
Любые идеи?
javascript
html
angularjs
до свидания
источник
источник
Ответы:
Ваша проблема не в Angular, а в методах Array. Правильный способ удалить конкретный элемент из массива
Array.splice
. Также при использовании ng-repeat у вас есть доступ к$index
свойству, которое является текущим индексом массива, который вы передали.Решение на самом деле довольно простое:
Посмотреть:
контроллер:
источник
indexOf
может быть более дорогой операцией; без фильтрации это совершенно не нужно. Но с фильтрацией,indexOf
будет соответствующий метод.Вам нужно будет найти индекс
person
в вашемpersons
массиве, а затем использовать метод массиваsplice
:источник
Я бы использовал библиотеку Underscore.js, в которой есть список полезных функций.
without
пример
Смотрите Демо в JSFiddle .
filter
пример
Смотрите Демо в Fiddle .
источник
$scope.nodes = _.without($scope.nodes, node);
потому что у него есть ссылка наnode
Array.prototype.filter
._.filter(array, fun)
становитсяarray.filter(fun)
.это работает для меня!
источник
Если у вас есть какая-либо функция, связанная со списком, при создании функции сращивания также удаляется ассоциация. Мое решение:
Список параметров именованных предметов . Параметр x.done указывает, будет ли элемент удален.
Другие ссылки: Другой пример
Надеюсь, вам поможет. Приветствую.
источник
Для принятого ответа @Joseph Silber не работает, потому что indexOf возвращает -1. Вероятно, это связано с тем, что Angular добавляет хеш-ключ, который отличается для моего $ scope.items [0] и моего элемента. Я попытался решить эту проблему с помощью функции angular.toJson (), но она не сработала :(
Ах, я выяснил причину ... Я использую метод чанка для создания двух столбцов в моей таблице, просматривая мои $ scope.items. Сожалею!
источник
Вы также можете использовать это
источник
Angular имеет встроенную функцию под названием
arrayRemove
, в вашем случае метод может быть просто:источник
источник
Чтобы удалить элемент из области видимости, используйте:
От введите описание ссылки здесь
источник