v-model Two-way Binding for Form Inputs

Last updated: 2026-10-22

v-model Two-way Binding for Form Inputs

v-model creates two-way binding between a form control and data: typing updates the state and state updates the control.

GroupDirectives
KindDirective
ScopeTemplate
Vue Version3.0+
SSR SupportYes

📝 Syntax

<input v-model="name">
<textarea v-model="desc"></textarea>
<input type="checkbox" v-model="agree">
<select v-model="city"><option>Wuhan</option></select>

⚙️ Arguments

expressionThe state property to bind; modifiers .lazy, .number and .trim tweak the sync behaviour

Returns:Directive, no return value

▶ Example

Edit the code below and see the live result:

Output:

Typing in the input updates the greeting in real time.

💡 Key Points

💡 Tip The .number modifier coerces to a number — essential for numeric work.
ℹ️ Note A checkbox bound to an array collects multiple values; bound to a boolean it is a single toggle.
⚠️ Warning v-model is sugar for :value plus @input; on custom components it is defined via modelValue or defineModel().
More case studies coming soon.

📚 Related Tutorials

❓ FAQ

Q Is the bound value a number or a string?
A Strings by default — add .number, especially for numeric inputs.
Q How does v-model work on a custom component?
A Declare the modelValue prop plus update:modelValue (or use defineModel() in 3.4+).
Q Can several inputs bind the same state?
A Yes — all stay in sync; editing one updates the others immediately.
Web-Tutorial.com

Web-Tutorial Tech Team

A team of developers maintaining programming tutorials. Each tutorial is written and reviewed by developers with expertise in that field. We work to keep our content accurate and reliable — if you spot an issue, please let us know.

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏