Saya punya beberapa kotak centang:
<input type='checkbox' value="apple" checked>
<input type='checkbox' value="orange">
<input type='checkbox' value="pear" checked>
<input type='checkbox' value="naartjie">
Bahwa saya ingin mengikat ke daftar di controller saya sehingga setiap kali kotak centang diubah controller mempertahankan daftar semua nilai yang diperiksa, misalnya ['apple', 'pear']
,.
ng-model tampaknya hanya dapat mengikat nilai satu kotak centang ke variabel di controller.
Apakah ada cara lain untuk melakukannya sehingga saya dapat mengikat empat kotak centang ke daftar di controller?
javascript
angularjs
nickponline
sumber
sumber
<input type='checkbox' ng-model="checkboxes.apple">
, dll. Modelnya adalah: {"apple": true, "orange": false, "pear": true, "naartjie": true}naartjie
!? Itu hanya memberi Anda kesempatan! : DJawaban:
Ada dua cara untuk mendekati masalah ini. Baik menggunakan array sederhana atau array objek. Setiap solusi memilikinya pro dan kontra. Di bawah ini Anda akan menemukan satu untuk setiap kasing.
Dengan array sederhana sebagai input data
HTML bisa terlihat seperti:
Dan kode pengontrol yang sesuai adalah:
Kelebihan : Struktur data sederhana dan beralih berdasarkan nama mudah ditangani
Kekurangan : Tambah / hapus rumit karena dua daftar (input dan seleksi) harus dikelola
Dengan array objek sebagai input data
HTML bisa terlihat seperti:
Dan kode pengontrol yang sesuai adalah:
Pro : Tambah / hapus sangat mudah
Cons : Agak struktur data yang lebih kompleks dan beralih dengan nama itu rumit atau memerlukan metode pembantu
Demo : http://jsbin.com/ImAqUC/1/
sumber
value="{{fruit.name}}"
danng-checked="fruit.checked"
berlebihan, karena ng-model digunakan.Solusi sederhana:
http://plnkr.co/edit/U4VD61?p=preview
sumber
(color,enabled) in colors
lakukan?colors
merupakan objek, ketika Anda mengulanginya - Anda mendapatkan pasangan(key,value)
.colors
harus dinamaiisSelected
, lebih mudah dibacaisSelected[color]
daripadacolors[color]
.
sumber
Berikut ini adalah petunjuk singkat yang dapat digunakan kembali yang tampaknya melakukan apa yang Anda inginkan. Saya hanya menyebutnya
checkList
. Ini memperbarui array ketika kotak centang berubah, dan memperbarui kotak centang ketika array berubah.Berikut adalah pengontrol dan tampilan yang menunjukkan bagaimana Anda bisa menggunakannya.
(Tombol-tombol menunjukkan bahwa mengubah array juga akan memperbarui kotak centang.)
Akhirnya, berikut adalah contoh arahan dalam tindakan di Plunker: http://plnkr.co/edit/3YNLsyoG4PIBW6Kj7dRK?p=preview
sumber
value: '@'
denganvalue: '=ngValue'
Berdasarkan jawaban di utas ini, saya telah membuat arahan daftar-model yang mencakup semua kasus:
Untuk kasus topik-pemula adalah:
sumber
selectedFruits
.Menggunakan string
$index
can dapat membantu menggunakan hashmap dari nilai yang dipilih:Dengan cara ini objek ng-model akan diperbarui dengan kunci yang mewakili indeks.
Setelah beberapa saat
$scope.someObject
akan terlihat seperti:Metode ini tidak akan berfungsi untuk semua situasi, tetapi mudah diterapkan.
sumber
Karena Anda menerima jawaban di mana daftar tidak digunakan, saya akan menganggap jawaban untuk pertanyaan komentar saya adalah "Tidak, itu tidak harus menjadi daftar". Saya juga mendapat kesan bahwa mungkin Anda sedang merender sisi server HTML, karena "diperiksa" ada dalam sampel HTML Anda (ini tidak akan diperlukan jika ng-model digunakan untuk memodelkan kotak centang Anda).
Bagaimanapun, inilah yang ada dalam pikiran saya ketika saya mengajukan pertanyaan, juga dengan asumsi Anda membuat sisi server HTML:
ng-init memungkinkan HTML yang dihasilkan sisi server untuk awalnya mengatur kotak centang tertentu.
Biola .
sumber
Saya pikir solusi termudah adalah dengan menggunakan 'pilih' dengan 'beberapa' yang ditentukan:
Kalau tidak, saya pikir Anda harus memproses daftar untuk membangun daftar (dengan
$watch()
mengikat array model dengan kotak centang).sumber
Saya telah mengadaptasi jawaban yang diterima Yoshi untuk berurusan dengan benda-benda kompleks (bukan string).
HTML
JavaScript
Contoh kerja: http://jsfiddle.net/tCU8v/
sumber
<input type="checkbox">
tanpa pembungkus atau pencocokan<label>
! Sekarang pengguna Anda harus mengklik pada kotak centang yang sebenarnya, bukan teks di sebelah kotak centang, yang jauh lebih sulit dan kegunaan yang buruk.Arahan sederhana lain bisa seperti:
Pengontrol:
Dan HTML:
Saya juga termasuk seorang Plunker: http://plnkr.co/edit/XnFtyij4ed6RyFwnFN6V?p=preview
sumber
Solusi berikut sepertinya pilihan yang baik,
Dan dalam nilai model pengontrol
fruits
akan seperti inisumber
Anda tidak harus menulis semua kode itu. AngularJS akan menjaga model dan kotak centang tetap sinkron hanya dengan menggunakan ngTrueValue dan ngFalseValue
Codepen di sini: http://codepen.io/paulbhartzog/pen/kBhzn
Cuplikan kode:
sumber
Lihat arahan ini yang mengelola daftar kotak centang secara efektif. Saya harap ini berhasil untuk Anda. Model Daftar Periksa
sumber
Ada cara untuk bekerja pada array secara langsung dan menggunakan ng-model sekaligus
ng-model-options="{ getterSetter: true }"
.Caranya adalah dengan menggunakan fungsi pengambil / penyetel dalam model-ng Anda. Dengan cara ini Anda dapat menggunakan array sebagai model asli Anda dan "memalsukan" boolean dalam model input:
CAVEAT Anda seharusnya tidak menggunakan metode ini jika array Anda besar karena
myGetterSetter
akan dipanggil berkali-kali.Untuk lebih lanjut tentang itu, lihat https://docs.angularjs.org/api/ng/directive/ngModelOptions .
sumber
Saya suka jawaban Yoshi. Saya meningkatkannya sehingga Anda dapat menggunakan fungsi yang sama untuk beberapa daftar.
http://plnkr.co/edit/KcbtzEyNMA8s1X7Hja8p?p=preview
sumber
Jika Anda memiliki beberapa kotak centang pada formulir yang sama
Kode pengontrol
Lihat kode
sumber
Terinspirasi dari pos Yoshi di atas. Ini plnkr .
sumber
Berdasarkan posting saya yang lain di sini , saya telah membuat arahan yang dapat digunakan kembali.
Lihat repositori GitHub
sumber
Dalam HTML (seandainya kotak centang berada di kolom pertama dari setiap baris dalam tabel).
Dalam
controllers.js
file:sumber
Inilah solusi lain. Kelebihan dari solusi saya:
Ini adalah arahannya:
Pada akhirnya gunakan saja seperti ini:
Dan hanya itu yang ada. Satu-satunya tambahan adalah
checkbox-array-set
atribut.sumber
Anda dapat menggabungkan AngularJS dan jQuery. Misalnya, Anda perlu mendefinisikan array
$scope.selected = [];
,, di controller.Anda bisa mendapatkan array yang memiliki item yang dipilih. Dengan menggunakan metode
alert(JSON.stringify($scope.selected))
, Anda dapat memeriksa item yang dipilih.sumber
sumber
Lihatlah ini: checklist-model .
Ini bekerja dengan array JavaScript, dan objek dan dapat menggunakan kotak centang HTML statis, tanpa ng-repeat
Dan sisi JavaScript:
sumber
Satu-satunya cara sederhana HTML untuk melakukannya:
sumber
Menggunakan contoh ini dari @Umur Kontacı, saya pikir menggunakan untuk menangkap data yang dipilih di seluruh objek / array lain, seperti halaman edit.
Opsi tangkapan di basis data
Beralih beberapa opsi
Sebagai contoh, semua warna json di bawah ini:
Dan 2 jenis objek data,
array
dengan satu objek danobject
berisi dua / lebih objek data:Dua item yang dipilih ditangkap di database:
Satu item dipilih ditangkap di database:
Dan di sini, kode javascript saya:
Kode Html saya:
[Sunting] Kode yang di-refactored di bawah ini:
Dan panggil metode baru seperti di bawah ini:
Itu dia!
sumber
Saya sudah meletakkan array di controller.
Pada markup saya telah memasukkan sesuatu seperti mengikuti
Outputnya adalah sebagai berikut, pada controller saya hanya perlu memeriksa apakah benar atau salah; benar untuk diperiksa, tidak ada / salah untuk tidak dicentang.
Semoga ini membantu.
sumber
Saya pikir cara berikut ini lebih jelas dan berguna untuk ng-mengulangi bersarang. Lihatlah di Plunker .
Kutipan dari utas ini :
sumber
Berikut adalah tautan jsFillde untuk hal yang sama, http://jsfiddle.net/techno2mahi/Lfw96ja6/ .
Ini menggunakan arahan yang tersedia untuk diunduh di http://vitalets.github.io/checklist-model/ .
Ini bagus untuk direktif karena aplikasi Anda akan sering membutuhkan fungsi ini.
Kode di bawah ini:
HTML:
JavaScript
sumber
<div>
daripada penutup</div>
,. Apakah Anda meninggalkan sesuatu?Coba bayi saya:
**
**
Kemudian untuk model apa saja dengan kotak centang, itu akan mengembalikan string dari semua input yang Anda pilih:
sumber