Saya mengalami masalah pengikatan tombol radio ke objek yang propertinya memiliki nilai boolean. Saya mencoba menampilkan pertanyaan ujian yang diambil dari sumber daya $.
HTML:
<label data-ng-repeat="choice in question.choices">
<input type="radio" name="response" data-ng-model="choice.isUserAnswer" value="true" />
{{choice.text}}
</label>
JS:
$scope.question = {
questionText: "This is a test question.",
choices: [{
id: 1,
text: "Choice 1",
isUserAnswer: false
}, {
id: 2,
text: "Choice 2",
isUserAnswer: true
}, {
id: 3,
text: "Choice 3",
isUserAnswer: false
}]
};
Dengan objek contoh ini, properti "isUserAnswer: true" tidak menyebabkan tombol radio dipilih. Jika saya merangkum nilai boolean dalam tanda kutip, itu berfungsi.
JS:
$scope.question = {
questionText: "This is a test question.",
choices: [{
id: 1,
text: "Choice 1",
isUserAnswer: "false"
}, {
id: 2,
text: "Choice 2",
isUserAnswer: "true"
}, {
id: 3,
text: "Choice 3",
isUserAnswer: "false"
}]
};
Sayangnya layanan REST saya memperlakukan properti itu sebagai boolean dan akan sulit untuk mengubah serialisasi JSON untuk merangkum nilai-nilai tersebut dalam tanda kutip. Apakah ada cara lain untuk mengatur model yang mengikat tanpa mengubah struktur model saya?
Inilah jsFiddle yang menunjukkan objek yang tidak bekerja dan bekerja
sumber
Itu pendekatan yang aneh dengan
isUserAnswer
. Apakah Anda benar-benar akan mengirim ketiga pilihan kembali ke server di mana ia akan mengulangi masing-masing memeriksaisUserAnswer == true
? Jika demikian, Anda dapat mencoba ini:http://jsfiddle.net/hgxjv/4/
HTML:
JavaScript:
Atau, saya sarankan mengubah taktik Anda:
http://jsfiddle.net/hgxjv/5/
Dengan begitu Anda bisa mengirim
{{question1.userChoiceId}}
kembali ke server.sumber
ngChecked
, kecuali Anda harus melepaskan diri dari menggunakan true / false sebagai string. Bisakah kamu melakukan itu? jsfiddle.net/hgxjv/6sumber
true
dinilai benar. Jika Andang-value
adalah string, misalnya, dan bukan referensi untuk sesuatu di dalamnya$scope
, Anda harus meletakkan string itu dalam tanda kutip. Itulah yang terjadi pada saya.Aku mencoba mengubah
value="true"
keng-value="true"
, dan tampaknya bekerja.<input type="radio" name="response2" data-ng-model="choice.isUserAnswer" ng-value="true" />
Juga, untuk mendapatkan kedua input berfungsi dalam contoh Anda, Anda harus memberikan nama yang berbeda untuk setiap input - misalnya
response
harus menjadiresponse1
danresponse2
.sumber
Anda mungkin melihat ini:
https://github.com/michaelmoussa/ng-boolean-radio/
Orang ini menulis arahan khusus untuk mengatasi masalah bahwa "benar" dan "salah" adalah string, bukan boolean.
sumber
Cara radio Anda diatur dalam biola - berbagi model yang sama - hanya akan menyebabkan kelompok terakhir menampilkan radio yang dicentang jika Anda memutuskan untuk mengutip semua nilai kebenaran. Pendekatan yang lebih solid akan melibatkan pemberian masing-masing kelompok model mereka sendiri, dan menetapkan nilai sebagai atribut unik dari radio, seperti id:
Berikut ini adalah representasi dari html baru:
Dan biola.
sumber
jika Anda menggunakan variabel boolean untuk mengikat tombol radio. silakan lihat kode contoh di bawah ini
sumber