以用 v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。
注意:v-model 会忽略所有表单元素的 value、checked、selected 属性的初始值,而总是将 Vue 实例的数据作为数据来源(进行初始化)。你应该通过 JavaScript 在组件的 data 选项中声明初始值。
v-model 在内部为不同的输入元素使用不同的属性并抛出不同的事件:
text 和 textarea 元素使用 value 属性和 input 事件;
checkbox 和 radio 元素使用 checked 属性和 change 事件;
select 元素使用 value 属性和 change 事件;
注意:对于需要使用输入法 (如中文、日文、韩文等) 的语言,你会发现 v-model 不会在输入法组合文字过程中得到更新。如果你也想处理这个过程,请使用 input 事件。
使用 v-model 将 input 绑定到 message 属性,修改 input 的值,message 属性的值也会同步修改。如下:
<html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Vue</title> <!-- 使用 CDN 引入 Vue 库 --> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> </head> <body> <div id="app"> <!-- 建立 input 与数据域 message 之间的双向绑定 --> <input v-model="message" placeholder="edit me"> <!-- 显示数据域 message 的内容到数据 --> <p>Message is: {{ message }}</p> </div> <script type="text/javascript"> var app = new Vue({ el: "#app", data: { // 数据域,用于与 input 建立绑定 message: "Init Value" } }); </script> </body> </html>
效果如下图: