Satu hal yang perlu diperhatikan adalah ngModel diperlukan agar ngOptions berfungsi ... perhatikan ng-model="blah"
yang berbunyi "set $ scope.blah ke nilai yang dipilih".
Coba ini:
<select ng-model="blah" ng-options="item.ID as item.Title for item in items"></select>
Berikut ini lebih banyak dari dokumentasi AngularJS (jika Anda belum melihatnya):
untuk sumber data array:
- label untuk nilai dalam array
- pilih sebagai label untuk nilai dalam array
- label grup demi grup untuk nilai dalam array = pilih sebagai grup label dengan grup untuk nilai dalam array
untuk sumber data objek:
- label untuk (kunci, nilai) pada objek
- pilih sebagai label untuk (kunci, nilai) pada objek
- label grup demi grup untuk (kunci, nilai) dalam objek
- pilih sebagai grup label dengan grup untuk (kunci, nilai) dalam objek
Untuk beberapa klarifikasi tentang nilai tag opsi di AngularJS:
Ketika Anda menggunakan ng-options
, nilai tag opsi yang ditulis oleh ng-options akan selalu menjadi indeks item array yang terkait dengan tag opsi . Ini karena AngularJS sebenarnya memungkinkan Anda untuk memilih seluruh objek dengan kontrol pilih, dan bukan hanya tipe primitif. Sebagai contoh:
app.controller('MainCtrl', function($scope) {
$scope.items = [
{ id: 1, name: 'foo' },
{ id: 2, name: 'bar' },
{ id: 3, name: 'blah' }
];
});
<div ng-controller="MainCtrl">
<select ng-model="selectedItem" ng-options="item as item.name for item in items"></select>
<pre>{{selectedItem | json}}</pre>
</div>
Di atas akan memungkinkan Anda untuk memilih seluruh objek menjadi $scope.selectedItem
langsung. Intinya, dengan AngularJS, Anda tidak perlu khawatir tentang apa yang ada di tag pilihan Anda. Biarkan AngularJS mengatasinya; Anda hanya harus peduli tentang apa yang ada dalam model Anda di ruang lingkup Anda.
Di sini ada seorang plunker yang menunjukkan perilaku di atas, dan menunjukkan HTML yang ditulis
Berurusan dengan opsi default:
Ada beberapa hal yang saya gagal sebutkan di atas berkaitan dengan opsi default.
Memilih opsi pertama dan menghapus opsi kosong:
Anda dapat melakukan ini dengan menambahkan sederhana ng-init
yang menetapkan model (dari ng-model
) ke elemen pertama dalam item yang Anda ulangi ng-options
:
<select ng-init="foo = foo || items[0]" ng-model="foo" ng-options="item as item.name for item in items"></select>
Catatan: Ini bisa menjadi sedikit gila jika foo
kebetulan diinisialisasi dengan benar ke sesuatu yang "palsu". Dalam hal ini, Anda mungkin ingin menangani inisialisasi foo
di controller Anda, kemungkinan besar.
Menyesuaikan opsi default:
Ini sedikit berbeda; di sini yang perlu Anda lakukan adalah menambahkan tag opsi sebagai anak pilihan Anda, dengan atribut nilai kosong, lalu sesuaikan teks dalamnya:
<select ng-model="foo" ng-options="item as item.name for item in items">
<option value="">Nothing selected</option>
</select>
Catatan: Dalam hal ini opsi "kosong" akan tetap ada bahkan setelah Anda memilih opsi lain. Ini bukan kasus untuk perilaku default pilihan di bawah AngularJS.
Opsi default khusus yang bersembunyi setelah seleksi dibuat:
Jika Anda ingin opsi default khusus Anda hilang setelah Anda memilih nilai, Anda bisa menambahkan atribut ng-hide ke opsi default Anda:
<select ng-model="foo" ng-options="item as item.name for item in items">
<option value="" ng-if="foo">Select something to remove me.</option>
</select>