Radio Buttons no Vue.js
Os radio buttons permitem selecionar uma única opção dentro de um grupo de alternativas. Assim como ocorre com checkboxes, a diretiva v-model
checked
change
checked
O exemplo abaixo mostra um conjunto de radio buttons que representam diferentes opções. Quando uma opção é selecionada, seu valor é armazenado na propriedade user:
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<input type="radio" value="Tom" v-model="user">
<label>Tom</label><br>
<input type="radio" value="Bob" v-model="user">
<label>Bob</label><br>
<input type="radio" value="Sam" v-model="user">
<label>Sam</label><br>
<span>Selecionado: {{ user }}</span>
</div>
<script>
Vue.createApp({
data() {
return {
user: ''
};
}
}).mount('#app');
</script>
</body>
</html>
Quando um radio button é selecionado, seu valor é armazenado na propriedade user e exibido na interface.

Radio Buttons Vinculados a Objetos
Cada radio button pode ser vinculado a um objeto, permitindo que a propriedade armazenada contenha mais informações. O atributo v-bind:value
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<script src="https://unpkg.com/vue"></script>
<div id="app">
<input type="radio" v-bind:value="{ name: 'Tom', age: 22 }" v-model="user">
<label>Tom</label><br>
<input type="radio" v-bind:value="{ name: 'Bob', age: 25 }" v-model="user">
<label>Bob</label><br>
<input type="radio" v-bind:value="{ name: 'Sam', age: 28 }" v-model="user">
<label>Sam</label><br>
<span v-if="user.name && user.age">Selecionado: {{ user.name }} - {{ user.age }}</span>
</div>
<script>
Vue.createApp({
data() {
return {
user: {}
};
}
}).mount('#app');
</script>
</body>
</html>
Quando um radio button é selecionado, o objeto correspondente é armazenado na propriedade user

Em vez de definir manualmente cada radio button, uma abordagem mais eficiente é armazenar as opções em um array e criar os radio buttons dinamicamente:
<!DOCTYPE html>
<html>
<head>
<title>Explorando Vue.js</title>
<meta charset="utf-8" />
</head>
<body>
<div id="app">
<template v-for="user in users">
<input type="radio" v-bind:value="user" v-model="selectedUser">
<label>{{ user.name }}</label><br>
</template>
<span v-if="selectedUser">Selecionado: {{ selectedUser.name }} - {{ selectedUser.age }}</span>
</div>
<script src="https://unpkg.com/vue"></script>
<script>
Vue.createApp({
data() {
return {
users: [
{ name: 'Tom', age: 22 },
{ name: 'Bob', age: 25 },
{ name: 'Sam', age: 28 }
],
selectedUser: null
};
}
}).mount('#app');
</script>
</body>
</html>
Neste exemplo, o array users
selectedUser