Saya telah bekerja dengan AngularJS selama beberapa minggu terakhir, dan satu hal yang benar-benar mengganggu saya adalah bahwa bahkan setelah mencoba semua permutasi atau konfigurasi yang ditentukan dalam spesifikasi di http://docs.angularjs.org/api/ng .directive: select , saya masih mendapatkan opsi kosong sebagai anak pertama dari elemen pilih.
Inilah Giok:
select.span9(ng-model='form.type', required, ng-options='option.value as option.name for option in typeOptions');
Di sini controller:
$scope.typeOptions = [
{ name: 'Feature', value: 'feature' },
{ name: 'Bug', value: 'bug' },
{ name: 'Enhancement', value: 'enhancement' }
];
Akhirnya, inilah HTML yang dihasilkan:
<select ng-model="form.type" required="required" ng-options="option.value as option.name for option in typeOptions" class="span9 ng-pristine ng-invalid ng-invalid-required">
<option value="?" selected="selected"></option>
<option value="0">Feature</option>
<option value="1">Bug</option>
<option value="2">Enhancement</option>
</select>
Apa yang harus saya lakukan untuk menghilangkannya?
PS: Hal-hal bekerja tanpa ini juga, tetapi hanya terlihat aneh jika Anda menggunakan select2 tanpa banyak pilihan.
null
merupakan salah satu nilai Anda.<option>
sehingga tat angular menghasilkan sesuatu seperti<option value="?">Select an option</option>
<option value="">Select an option</option>
Nilai-nol dari daftar opsi. Tidak perlu untuk?Jika Anda menginginkan nilai awal, lihat jawaban @ pkozlowski.opensource, yang FYI juga dapat diimplementasikan dalam tampilan (daripada di controller) menggunakan ng-init:
Jika Anda tidak menginginkan nilai awal, "elemen hard-kode tunggal, dengan nilai yang disetel ke string kosong, dapat disarangkan ke dalam elemen. Elemen ini kemudian akan mewakili opsi nol atau" tidak dipilih "":
sumber
Sudut <1.4
Bagi siapa pun di luar sana yang memperlakukan "null" sebagai nilai yang valid untuk salah satu opsi (jadi bayangkan bahwa "null" adalah nilai dari salah satu item dalam typeOptions dalam contoh di bawah), saya menemukan cara paling sederhana untuk memastikan bahwa secara otomatis ditambahkan opsi yang disembunyikan adalah menggunakan ng-if.
Kenapa ng-jika dan tidak ng-sembunyikan? Karena Anda ingin penyeleksi css yang akan menargetkan opsi pertama di dalam, pilih untuk menargetkan opsi "nyata", bukan yang disembunyikan. Ini berguna ketika Anda menggunakan busur derajat untuk pengujian e2e dan (untuk alasan apa pun) yang Anda gunakan by.css () untuk menargetkan opsi pilih.
Angular> = 1.4
Karena refactoring arahan pilih dan opsi, menggunakan
ng-if
tidak lagi menjadi opsi yang layak sehingga Anda harus beralihng-show="false"
untuk membuatnya bekerja lagi.sumber
size="5"
atribut untuk memilih dan Anda dapat melihat bahwa tidak ada yang dipilih! Seperti di<select>
-Element default ! Saya tidak dapat mengerti mengapa sudut melakukan hal seperti itu untuk memilih tanpamultiple
atribut ...Mungkin bermanfaat bagi seseorang:
Jika Anda ingin menggunakan opsi biasa alih-alih opsi-ng, Anda dapat melakukannya seperti di bawah ini:
Atur model sebaris. Gunakan ng-init untuk menghilangkan opsi kosong
sumber
Hal serupa terjadi pada saya juga dan disebabkan oleh peningkatan ke sudut 1,5.
ng-init
tampaknya sedang diuraikan untuk mengetik dalam versi Angular yang lebih baru. Dalam Angular yang lebih tuang-init="myModelName=600"
akan memetakan ke opsi dengan nilai "600" yaitu<option value="600">First</option>
tetapi dalam Angular 1.5 tidak akan menemukan ini karena tampaknya mengharapkan untuk menemukan opsi dengan nilai 600 yaitu<option value=600>First</option>
. Angular kemudian akan memasukkan item pertama acak:Angular <1.2.x
Sudut> 1.2
sumber
ng-value="600"
dioption
bukanvalue
. Ini akan menguraikannya ke angka dan Anda tidak perlu mengkonversi nilai-nilai Anda seperti yang Anda lakukan sekarang :)Di antara banyak jawaban di sini, saya pikir saya akan memposting ulang solusi yang bekerja untuk saya dan memenuhi semua kondisi berikut:
value=""
)kode
src
q & a asli - https://stackoverflow.com/a/32880941/1121919
sumber
<option ng-selected="true" value="null">
?Solusi cepat:
Semoga ini bisa membantu seseorang. Idealnya, jawaban yang dipilih harus pendekatan tetapi jika dalam kasus itu tidak mungkin maka harus berfungsi sebagai tambalan.
sumber
Ya ng-model akan membuat nilai opsi kosong, ketika properti ng-model tidak ditentukan. Kita bisa menghindari ini, jika kita menetapkan objek ke ng-model
Contoh
pengkodean sudut
Catatan penting:
Tetapkan objek array seperti $ scope.collections [0] atau $ scope.collections [1] untuk ng-model, jangan gunakan properti objek. jika Anda mendapatkan nilai opsi pilih dari server, menggunakan fungsi panggilan balik, tetapkan objek ke model-ng
CATATAN dari dokumen sudut
Catatan: ngModel membandingkan dengan referensi, bukan nilai. Ini penting saat mengikat ke array objek. lihat contoh http://jsfiddle.net/qWzTb/
Saya telah mencoba berkali-kali akhirnya saya menemukannya.
sumber
Meskipun jawaban @ pkozlowski.opensource dan @ Mark benar, saya ingin membagikan versi yang sedikit dimodifikasi di mana saya selalu memilih item pertama dalam daftar, terlepas dari nilainya:
sumber
Saya menggunakan Angular 1.4x dan saya menemukan contoh ini, jadi saya menggunakan ng-init untuk menetapkan nilai awal di pilih:
sumber
Saya menghadapi masalah yang sama. Jika Anda memposting bentuk sudut dengan posting normal maka Anda akan menghadapi masalah ini, karena sudut tidak memungkinkan Anda untuk menetapkan nilai untuk opsi dengan cara yang telah Anda gunakan. Jika Anda mendapatkan nilai "form.type" maka Anda akan menemukan nilai yang tepat. Anda harus memposting objek sudut itu sendiri bukan bentuk posting.
sumber
Solusi sederhana adalah dengan menetapkan opsi dengan nilai kosong yang
""
saya temukan ini menghilangkan opsi tambahan yang tidak ditentukan.sumber
Ok, sebenarnya jawabannya adalah sederhana: ketika ada opsi yang tidak dikenali oleh Angular, itu termasuk yang membosankan. Apa yang Anda lakukan salah adalah, ketika Anda menggunakan opsi-ng, itu membaca objek, katakanlah
[{ id: 10, name: test }, { id: 11, name: test2 }] right?
Ini adalah apa nilai model Anda perlu untuk mengevaluasinya sebagai sama, katakanlah Anda ingin nilai yang dipilih menjadi 10, Anda perlu mengatur model Anda ke nilai suka
{ id: 10, name: test }
memilih 10, karena itu TIDAK akan membuat sampah itu.Semoga ini bisa membantu semua orang untuk mengerti, saya kesulitan mencoba :)
sumber
Solusi ini bekerja untuk saya:
sumber
Ini berhasil untuk saya
sumber
Ini berfungsi dengan baik
cara kerjanya adalah, ini memberikan opsi pertama untuk ditampilkan sebelum memilih sesuatu dan
display:none
menghapusnya membentuk dropdown jadi jika Anda mau, Anda bisa melakukannyadan ini akan memberi Anda
select and option
sebelum memilih tetapi setelah dipilih itu akan menghilang, dan itu tidak akan muncul di dropdown.sumber
Coba yang ini di controller Anda, dalam urutan yang sama:
sumber
Inilah solusinya:
untuk data sampel seperti:
Pilihan yang dipilih harus seperti ini: -
Intinya adalah ketika kita menulis
value.listCount
sepertivalue.listName
itu, secara otomatis mengisi teksvalue.listName
tetapi nilai opsi yang dipilih adalahvalue.listCount
meskipun nilai-nilai saya menunjukkan normal 0,1,2 .. dan seterusnya !!!Dalam kasus saya,
financeRef.financeLimit
sebenarnya meraihvalue.listCount
dan saya dapat melakukan manipulasi saya di controller secara dinamis.sumber
Saya ingin menambahkan bahwa jika nilai awal berasal dari ikatan dari beberapa elemen induk atau komponen 1,5, pastikan bahwa jenis yang tepat dilewatkan. Jika menggunakan
@
dalam pengikatan, variabel yang dikirimkan akan berupa string dan jika opsinya mis. bilangan bulat maka opsi kosong akan muncul.Entah mengurai nilai init dengan benar, atau mengikat dengan
<
dan tidak@
(kurang direkomendasikan untuk kinerja kecuali diperlukan).sumber
Solusi sederhana
sumber
Solusi menggiling dengan jQuery ketika Anda tidak memiliki kendali atas opsi
html:
js:
sumber
Jika Anda menggunakan ng-init model Anda untuk menyelesaikan masalah ini:
sumber
saya punya masalah yang sama, saya (dihapus "ng-model") mengubah ini:
untuk ini:
sekarang ini berfungsi, tetapi dalam kasus saya itu karena saya menghapus lingkup itu dari ng.controller, periksa apakah Anda tidak melakukan hal yang sama.
sumber
Hai, saya punya beberapa referensi seluler JQUery dan saya menghapusnya. Dengan jQuery mobile, salah satu perbaikan di atas tidak bekerja untuk saya. (Sangat bagus jika seseorang dapat menjelaskan konflik antara jQuery Mobile dan Angular JS)
https://guntucomputerhacks.blogspot.com.au/2017/10/angular-js-drop-down-first-options-vs.html
sumber
Satu-satunya hal bekerja untuk saya menggunakan
track by
dalamng-options
, seperti ini:sumber
ng-option
mendapatkan nilai terakhir array yang saya ingin nilai setoption
dariselect
. Itu tidak menyelesaikan :(Rujuk contoh dari dokumentasi sudut bagaimana mengatasi masalah ini.
Ini bekerja untuk saya. Bisa juga melihat cara kerjanya di sini
sumber
Kita bisa menggunakan CSS untuk menyembunyikan opsi pertama, Tapi itu tidak akan berfungsi di IE 10, 11. Cara terbaik adalah menghapus elemen menggunakan Jquery. Solusi ini berfungsi untuk peramban utama yang diuji dalam chrome dan IE10, 11
Juga jika Anda menggunakan sudut, kadang menggunakan karya setTimeout
sumber