+
+
+
diff --git a/src/.vuepress/config.js b/src/.vuepress/config.js
index a573349d1f..293ea9745e 100644
--- a/src/.vuepress/config.js
+++ b/src/.vuepress/config.js
@@ -39,6 +39,7 @@ module.exports = {
'conditional',
'list',
'events',
+ 'forms'
]
}
]
diff --git a/src/guide/forms.md b/src/guide/forms.md
new file mode 100644
index 0000000000..3571386c36
--- /dev/null
+++ b/src/guide/forms.md
@@ -0,0 +1,280 @@
+# Form Input Bindings
+
+## Basic Usage
+
+You can use the `v-model` directive to create two-way data bindings on form input, textarea, and select elements. It automatically picks the correct way to update the element based on the input type. Although a bit magical, `v-model` is essentially syntax sugar for updating data on user input events, plus special care for some edge cases.
+
+::: tip Note
+`v-model` will ignore the initial `value`, `checked` or `selected` attributes found on any form elements. It will always treat the Vue instance data as the source of truth. You should declare the initial value on the JavaScript side, inside the `data` option of your component.
+:::
+
+`v-model` internally uses different properties and emits different events for different input elements:
+
+- text and textarea elements use `value` property and `input` event;
+- checkboxes and radiobuttons use `checked` property and `change` event;
+- select fields use `value` as a prop and `change` as an event.
+
+
+::: tip Note
+For languages that require an [IME](https://en.wikipedia.org/wiki/Input_method) (Chinese, Japanese, Korean etc.), you'll notice that `v-model` doesn't get updated during IME composition. If you want to cater for these updates as well, use `input` event instead.
+:::
+
+### Text
+
+```html
+
+
Message is: {{ message }}
+```
+
+
+
+### Multiline text
+
+```html
+Multiline message is:
+
{{ message }}
+
+
+```
+
+
+
+Interpolation on textareas won't work. Use `v-model` instead.
+
+```html
+
+
+
+
+
+```
+
+### Checkbox
+
+Single checkbox, boolean value:
+
+```html
+
+
+```
+
+
+
+Multiple checkboxes, bound to the same Array:
+
+```html
+
+```
+
+```js
+Vue.createApp().mount(
+ {
+ data() {
+ return {
+ selected: ''
+ }
+ }
+ },
+ '#example-select'
+)
+```
+
+
+
+:::tip Note
+If the initial value of your `v-model` expression does not match any of the options, the `