Reputation: 551
I have an api that has Male and Female gender options.I would like to select only one gender option at a time.The default gender should be male.Currently i am trying the code below but its not working.
<div>
<label class="radio" v-for="(gender,index) in genders" :key="index">
<input type="radio"
@click="selectedGender('gender', gender.code)">
{{gender.description}}
</label>
</div>
data: {
gender: 'M',
genders:
[
{
code: "F",
description: "Female",
},
{
code: "M",
description: "Male",
},
],
methods: {
selectedGender(type,option){
if (type=== 'gender') {
this.gender = option;
}
Upvotes: 1
Views: 859
Reputation: 801
Instead of using loops & click event handlers, you can simply use v-model
to bind your radio options value
attribute to your vue data's gender
variable:
<div>
<label for="male">
<input type="radio" id="male" value="M" v-model="gender">Male
</label>
<label for="female">
<input type="radio" id="female" value="F" v-model="gender">Female
</label>
</div>
data: {
gender: "M",
}
Upvotes: 2
Reputation: 2747
Here is your fix :
<div>
<label class="radio" v-for="singleGender in genders">
<input type="radio" v-model="gender" v-bind:value="singleGender.code">
{{singleGender.description}}
</label>
</div>
<div>{{gender}}</div>
And here is your data :
data: {
gender: "M",
genders: [
{
code: "F",
description: "Female"
},
{
code: "M",
description: "Male"
}
]
}
There is no need to use click event for store it's value to Model. Note : maybe in template selector, html can't render in DOM until you render it manually.
Upvotes: 1
Reputation: 3317
Here is the solution:
<template>
<div>
<label class="radio" v-for="(gender, index) in genders" :key="index">
<input type="radio" :value="gender.code" v-model="selGender" @click="selectedGender(gender.code)" />
{{ gender.description }}
</label>
</div>
</template>
<script>
export default {
name: "App",
components: {},
data() {
return {
selGender: "M",
genders: [
{
code: "F",
description: "Female",
},
{
code: "M",
description: "Male",
},
],
};
},
methods: {
selectedGender(option) {
this.selGender = option;
},
},
};
</script>
Upvotes: 1