Di Angular 1 saya dapat memilih opsi default untuk kotak drop-down menggunakan yang berikut:
<select
data-ng-model="carSelection"
data-ng-options = "x.make for x in cars" data-ng-selected="$first">
</select>
Di Angular 2 saya punya:
<select class="form-control" [(ngModel)]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
Bagaimana saya bisa memilih opsi default mengingat data opsi saya adalah:
[{name: 'arm'}, {name: 'back'}, {name:'leg'}]
dan nilai saya sebagai default adalah back
?
[(ngModel)]
pengikatan oleh karena itu ia mendengarkan[selected]
pengikatan di plnkr dan bukan di kode OP (lihat jawaban saya untuk tautan ke plnr bercabang yang menjelaskan efek ini)selected="workout.name == 'back'"
Formulir Reaktif menggunakan:[selected]=workout.name == 'back'
"
. Saya menggunakan kode Anda dengan variabel lain seperti ini[selected]="workout.name == exercise.name"
Jika Anda menetapkan nilai default ke
selectedWorkout
dan menggunakan[ngValue]
(yang memungkinkan untuk menggunakan objek sebagai nilai - jika tidak, hanya string yang didukung) maka itu harus melakukan apa yang Anda inginkan:Pastikan nilai yang Anda tetapkan
selectedWorkout
adalah nilai yang sama dengan yang digunakan diworkouts
. Contoh objek lain bahkan dengan properti dan nilai yang sama tidak akan dikenali. Hanya identitas objek yang diperiksa.memperbarui
Angular menambahkan dukungan untuk
compareWith
, yang membuatnya lebih mudah untuk mengatur nilai default saat[ngValue]
digunakan (untuk nilai obyek)Dari dokumen https://angular.io/api/forms/SelectControlValueAccessor
Dengan cara ini, instance objek (baru) yang berbeda dapat disetel sebagai nilai default dan
compareFn
digunakan untuk mengetahui apakah keduanya harus dianggap sama (misalnya jikaid
propertinya sama.sumber
[value]
alih-alih[ngValue]
atau kode Anda entah bagaimana menyebabkan nilai diubah menjadi string.c1
danc2
diindikasikancompareFn
? Dan juga, bagaimana cara kerja evaluasi pada fungsi tubuh?selectedCountries
dancountry
cukup atur nilai model ke default yang Anda inginkan seperti ini:
Saya membuat garpu @Douglas 'plnkr di sini untuk mendemonstrasikan berbagai cara untuk mendapatkan perilaku yang diinginkan dalam angular2.
sumber
<select [(ngModel)]="selectedTimeFrame"> <option *ngFor="let val of timeFrames" [ngValue]="val">val</option> </select>
Tambahkan Kode ini pada posisi o dari daftar pilih.
<option [ngValue]="undefined" selected>Select</option>
sumber
Anda bisa mendekati dengan cara ini:
atau begini:
atau Anda dapat menyetel nilai default dengan cara ini:
atau
sumber
Gunakan indeks untuk menampilkan nilai pertama sebagai default
sumber
Menurut https://angular.io/api/forms/SelectControlValueAccessor, Anda hanya perlu yang berikut ini:
theView.html:
theComponent.ts
sumber
Sedikit berjuang dengan yang satu ini, tetapi berakhir dengan solusi berikut ... mungkin itu akan membantu seseorang.
Template HTML:
Komponen:
sumber
Sepenuhnya menyempurnakan posting lain, inilah yang berfungsi di quickstart Angular2,
Untuk menyetel default DOM: bersama dengan
*ngFor
, gunakan pernyataan kondisional<option>
diselected
atribut 's .Untuk menyetel
Control
default: gunakan argumen konstruktornya. Jika tidak, sebelum onchange ketika pengguna memilih kembali sebuah opsi, yang menetapkan nilai kontrol dengan atribut nilai opsi yang dipilih, nilai kontrol akan menjadi null.naskah:
markup:
sumber
Anda dapat Menggunakannya
[ngModel]
sebagai pengganti[(ngModel)]
dan itu Oksumber
Anda dapat melakukan seperti di atas:
Dalam kode di atas seperti yang Anda lihat, atribut yang dipilih dari opsi berulang diatur pada pemeriksaan indeks dari daftar pengulangan berulang. [attr. <html attribute name>] digunakan untuk menyetel atribut html di angular2.
Pendekatan lain akan menetapkan nilai model dalam file skrip sebagai:
sumber
Tambahkan pada jawaban @Matthijs, pastikan
select
elemen Anda memilikiname
atribut danname
unik di template html Anda. Angular 2 menggunakan nama input untuk memperbarui perubahan. Jadi, jika ada nama duplikat atau tidak ada nama yang dilampirkan ke elemen masukan, pengikatan akan gagal.sumber
Tambahkan properti penjilidan yang dipilih, tetapi pastikan untuk membuatnya null, untuk bidang lain misalnya:
Sekarang ini akan berhasil
sumber
Jika Anda menggunakan formulir, harus ada
name
bidang di dalamselect
tag.Yang perlu Anda lakukan hanyalah menambahkan
value
keoption
tag.selectedWorkout
nilai harus "kembali", dan selesai.sumber
Jika Anda tidak ingin pengikatan 2 arah melalui [(ngModel)], lakukan ini:
Baru saja menguji proyek saya di Angular 4 dan berhasil! AccountsList adalah larik objek Akun yang namanya merupakan properti Akun.
Pengamatan yang menarik:
[ngValue] = "acct" memberikan hasil yang sama dengan [ngValue] = "acct.name".
Tidak tahu bagaimana Angular 4 melakukannya!
sumber
sumber
Bagi saya, saya mendefinisikan beberapa properti:
Kemudian di konstruktor dan ngOnInit
Dan di template saya menambahkan ini sebagai opsi pertama di dalam elemen pilih
Jika Anda mengizinkan untuk memilih opsi pertama Anda bisa menghapus penggunaan properti disabledFirstOption
sumber
Dalam kasus saya, di sini
this.selectedtestSubmitResultView
diatur dengan nilai default berdasarkan kondisi dan variabeltestSubmitResultView
harus satu dan sama sepertitestSubmitResultView
. Ini memang berhasil untuk sayaUntuk informasi lebih lanjut,
sumber
Saya menghadapi Masalah ini sebelumnya dan saya memperbaikinya dengan berbagai cara penyelesaian sederhana
Untuk Component.html Anda
Kemudian di component.ts Anda, Anda dapat mendeteksi opsi yang dipilih dengan
sumber
bekerja dengan baik seperti yang terlihat di bawah ini:
sumber
Anda hanya perlu meletakkan ngModel dan nilai yang ingin Anda pilih:
sumber