Vue 3 is in beta and it’s subject to change.
Vue 3 is the up and coming version of Vue front end framework.
It builds on the popularity and ease of use of Vue 2.
In this article, we’ll look at how to use the Vue 3 v-model directive.
Multiple Select
Select elements that let us do multiple selections work with the v-model directive.
For instance, we can write:
<!DOCTYPE html>
<html lang="en">
<head>
<title>App</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="app">
<select v-model="selected" multiple>
<option disabled value="">Please select one</option>
<option>apple</option>
<option>orange</option>
<option>grape</option>
</select>
<p>{{ selected }}</p>
</div>
<script>
const vm = Vue.createApp({
data() {
return {
selected: []
};
}
}).mount("#app");
</script>
</body>
</html>
We have the select element which has the multiple attribute.
The selected variable is a variable instead of a string since it can contain multiple values.
v-model is bound to the selected array so that Vue can get all the selected values and put it in the array.
Now when we choose multiple options from the select box, we can see all of them in an array.
Dynamic Options
We can add dynamic options in the select element.
For instance, we can write:
<!DOCTYPE html>
<html lang="en">
<head>
<title>App</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="app">
<select v-model="selected">
<option disabled value="">Please select one</option>
<option v-for="option in options" :value="option.value">
{{ option.text }}
</option>
</select>
<p>{{ selected }}</p>
</div>
<script>
const vm = Vue.createApp({
data() {
return {
selected: [],
options: [
{ value: "apple", text: "apple" },
{ value: "orange", text: "orange" },
{ value: "grape", text: "grape" }
]
};
}
}).mount("#app");
</script>
</body>
</html>
to render the options with the v-for directive.
option.value is used as the value of each option .
and option.text is used as the value of each text entry.
Value Bindings
Radio buttons and select elements are bound to string with v-model .
Checkboxes are bound to boolean values.
We can use the v-bind directive to bind to types of values that are different from the default.
For example, we can write:
<!DOCTYPE html>
<html lang="en">
<head>
<title>App</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="app">
<input
type="checkbox"
v-model="toggle"
true-value="yes"
false-value="no"
/>
<p>{{ toggle }}</p>
</div>
<script>
const vm = Vue.createApp({
data() {
return {
toggle: ""
};
}
}).mount("#app");
</script>
</body>
</html>
We added the true-value and false-value props so that the checkbox bind to those values instead of a boolean.
So true is 'yes' and false is 'no' .
That’s what we’ll see when we click the checkbox.
We can do the same thing with radio buttons.
For example, we can write:
<!DOCTYPE html>
<html lang="en">
<head>
<title>App</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="app">
<input type="radio" v-model="selected" :value="apple" />
<label>apple</label>
<input type="radio" v-model="selected" :value="orange" />
<label>orange</label>
<p>{{ selected }}</p>
</div>
<script>
const vm = Vue.createApp({
data() {
return { selected: "", apple: "apple", orange: "orange" };
}
}).mount("#app");
</script>
</body>
</html>
We dynamically bound the value with the :value directive instead of setting the value statically.
Since v-model of both radio buttons are set to the same value, we can select between them.
Then their value will be displayed.
Conclusion
Many kinds of form controls work with the v-model directive.
Also, we can bind to their values in different ways.