Elemento Select no Vue.js
O elemento <select>
v-model
<select>
value
<option>
change
É importante notar que o atributo selected
<option>
v-model
Seleção Única
Um <select>
<!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">
<select v-model="user">
<option>Tom</option>
<option>Bob</option>
<option>Sam</option>
</select>
<span>Selecionado: {{ user }}</span>
</div>
<script>
Vue.createApp({
data() {
return {
user: ''
};
}
}).mount('#app');
</script>
</body>
</html>
Quando um item é selecionado, o valor correspondente é armazenado na propriedade user

Lista com Seleção Múltipla
O atributo multiple
<select>
<!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">
<select v-model="users" multiple>
<option>Tom</option>
<option>Bob</option>
<option>Sam</option>
<option>Alice</option>
</select>
<p>Selecionados: {{ users }}</p>
</div>
<script>
Vue.createApp({
data() {
return {
users: []
};
}
}).mount('#app');
</script>
</body>
</html>
Os valores das opções escolhidas são adicionados ao array users

Vinculando a um Array de Objetos
Quando os itens da lista são criados dinamicamente, a diretiva v-for
<option>
v-bind:value
<div id="app">
<select v-model="selectedUser">
<option v-for="user in users" v-bind:value="user.name">{{ user.name }}</option>
</select>
<span>Selecionado: {{ selectedUser }}</span>
</div>
<script>
Vue.createApp({
data() {
return {
users: [
{ name: 'Tom', age: 22 },
{ name: 'Bob', age: 25 },
{ name: 'Sam', age: 28 },
{ name: 'Alice', age: 26 }
],
selectedUser: ''
};
}
}).mount('#app');
</script>
Neste exemplo, os nomes dos objetos do array users
selectedUser

Selecionando o Objeto Completo
Em vez de armazenar apenas um atributo do objeto, todo o objeto pode ser selecionado e armazenado diretamente na propriedade selectedUser
<div id="app">
<select v-model="selectedUser">
<option v-for="user in users" v-bind:value="user">{{ user.name }}</option>
</select>
<span v-if="selectedUser">Selecionado: {{ selectedUser.name }} - {{ selectedUser.age }}</span>
</div>
<script>
Vue.createApp({
data() {
return {
users: [
{ name: 'Tom', age: 22 },
{ name: 'Bob', age: 25 },
{ name: 'Sam', age: 28 },
{ name: 'Alice', age: 26 }
],
selectedUser: null
};
}
}).mount('#app');
</script>
Neste caso, a propriedade selectedUser
Selecionando Múltiplos Objetos
A mesma abordagem pode ser aplicada a um <select>
<div id="app">
<select v-model="selectedUsers" multiple>
<option v-for="user in users" v-bind:value="user">{{ user.name }}</option>
</select>
<h3>Usuários Selecionados</h3>
<ul>
<li v-for="user in selectedUsers">{{ user.name }} - {{ user.age }}</li>
</ul>
</div>
<script>
Vue.createApp({
data() {
return {
users: [
{ name: 'Tom', age: 22 },
{ name: 'Bob', age: 25 },
{ name: 'Sam', age: 28 },
{ name: 'Alice', age: 26 }
],
selectedUsers: []
};
}
}).mount('#app');
</script>
Com essa abordagem, os objetos correspondentes às opções escolhidas são armazenados no array selectedUsers
