--- title: v-model Ignores Initial HTML Attributes impact: HIGH impactDescription: v-model ignores value, checked, and selected HTML attributes - initial state must be set in JavaScript type: capability tags: [vue3, v-model, forms, input, checkbox, select, initialization] --- # v-model Ignores Initial HTML Attributes **Impact: HIGH** - Setting initial values via HTML `value`, `checked`, or `selected` attributes has no effect when using v-model. The form will appear empty or in an unexpected state, confusing users and potentially causing data loss. Vue's v-model always treats the bound JavaScript state as the single source of truth. Any initial attributes in the HTML are completely ignored. This is a common mistake when migrating from plain HTML forms or when copying HTML templates. ## Task Checklist - [ ] Never rely on HTML `value`, `checked`, or `selected` attributes when using v-model - [ ] Always declare initial values in JavaScript using `ref()` or `reactive()` - [ ] When migrating plain HTML forms to Vue, move all default values to JavaScript state - [ ] Audit existing forms for hardcoded HTML default values that may be silently ignored **Incorrect:** ```html ``` **Correct:** ```html ``` ```javascript // Options API equivalent export default { data() { return { username: 'default_user', isSubscribed: true, country: 'us' } } } ``` ## Reference - [Vue.js Form Input Bindings](https://vuejs.org/guide/essentials/forms.html)