Agenda yang harus dilakukan, tetapi dengan tombol hapus pada halaman daftar untuk setiap item:
HTML templat yang relevan:
<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>
Metode pengontrol yang relevan:
$scope.delete = function (person) {
API.DeletePerson({ id: person.id }, function (success) {
// I need some code here to pull the person from my scope.
});
};
Saya mencoba $scope.persons.pull(person)
dan $scope.persons.remove(person)
.
Meskipun database berhasil dihapus, saya tidak bisa menarik item ini dari ruang lingkup dan saya tidak ingin membuat panggilan metode ke server untuk data yang sudah dimiliki klien, saya hanya ingin menghapus orang ini dari ruang lingkup.
Ada ide?
javascript
html
angularjs
Sampai jumpa
sumber
sumber
Jawaban:
Masalah Anda sebenarnya bukan dengan Angular, tetapi dengan metode Array. Cara yang tepat untuk menghapus item tertentu dari array adalah dengan
Array.splice
. Juga, ketika menggunakan ng-repeat, Anda memiliki akses ke$index
properti khusus , yang merupakan indeks saat ini dari array yang Anda lewati.Solusinya sebenarnya cukup mudah:
Melihat:
Pengendali:
sumber
indexOf
bisa menjadi operasi yang lebih mahal; tanpa penyaringan, itu sama sekali tidak perlu. Tetapi dengan penyaringan,indexOf
akan menjadi metode yang tepat.Anda harus menemukan indeks
person
dalampersons
array Anda , lalu gunakan metode arraysplice
:sumber
Saya akan menggunakan perpustakaan Underscore.js yang memiliki daftar fungsi yang berguna.
without
Contoh
Lihat Demo di JSFiddle .
filter
Contoh
Lihat Demo di Fiddle .
sumber
$scope.nodes = _.without($scope.nodes, node);
karena dia memiliki referensi kenode
Array.prototype.filter
._.filter(array, fun)
menjadiarray.filter(fun)
.ini bekerja untuk saya!
sumber
Jika Anda memiliki fungsi yang terkait dengan daftar, ketika Anda membuat fungsi sambatan, asosiasi tersebut juga dihapus. Solusi saya:
Param daftar bernama item . Param x.done menunjukkan jika item tersebut akan dihapus.
Referensi lain: Contoh lain
Semoga bisa membantu Anda. Salam pembuka.
sumber
Untuk jawaban yang diterima dari @Joseph Silber tidak berfungsi, karena indexOf mengembalikan -1. Ini mungkin karena Angular menambahkan hashkey, yang berbeda untuk $ scope.items [0] saya dan item saya. Saya mencoba menyelesaikan ini dengan fungsi angular.toJson (), tetapi tidak berhasil :(
Ah, saya menemukan alasannya ... Saya menggunakan metode chunk untuk membuat dua kolom di meja saya dengan menonton $ scope.items saya. Maaf!
sumber
Anda juga bisa menggunakan ini
sumber
Angular memiliki fungsi bawaan yang disebut
arrayRemove
, dalam kasus Anda metode ini dapat berupa:sumber
sumber
Untuk menghapus elemen dari ruang lingkup gunakan:
Dari masukkan uraian tautan di sini
sumber