指南
基础概要
- 安装
- 介绍
- Vue 实例
- 模板语法
- computed 属性和 watcher
- class 和 style 绑定
- 根据条件进行渲染
- 列表渲染
- 事件处理
- 表单 input 绑定
- 组件基础
过渡 & 动画
- 进入、离开和列表的过渡
深入组件
- 组件注册
- props
- 自定义事件
- slot
- 动态组件和异步组件
- Handling Edge Cases
- 状态间的过渡
可重用 & 合成
- mixin
- 自定义指令
- render 函数 & jsx
- 插件
- 过滤器
工具
- 生产环境部署
- 单文件组件
- 单元测试
- TypeScript 支持
扩展升级
- 路由
- 状态管理
- 服务端渲染
内部原理
- 深入响应式原理
升级迁移
- 从 Vue 1.x 迁移
- 从 Vue Router 0.7.x 迁移
- 从 Vuex 0.6.x 迁移到 1.0
其他更多
- 对比其他框架
- 加入 Vue.js 社区
- 认识团队
表单 input 绑定
基础用法
可以通过使用 v-model
指令,在表单 input 和 textarea 元素上创建双向数据绑定。v-model
指令可以根据 input 的 type 类型,自动地以正确的方式更新元素。虽然略显神奇,然而本质上 v-model
不过是「通过监听用户的 input 事件来更新数据」的语法糖,以及对一些边界情况做特殊处理。
v-model
会忽略所有表单元素中 value
, checked
或 selected
属性上初始设置的值,而总是将 Vue 实例中的 data 作为真实数据来源。因此你应该在 JavaScript 端的组件 data
选项中声明这些初始值,而不是 HTML 端。
对于需要使用输入法的语言(中文、日文、韩文等),你会发现,在输入法字母组合窗口输入时,v-model
并不会触发数据更新。如果你想在此输入过程中,满足更新数据的需求,请使用 input
事件。
单行文本(text)
<input v-model="message" placeholder="编辑"> |
message 是:{{ message }}
多行文本(multiple text)
<span>多行 message 是:</span> |
{{ message }}
在 textarea 中插值(<textarea>{{text}}</textarea>
)并不会生效。使用 v-model
来替代。
checkbox
单选 checkbox,绑定到布尔值:
<input type="checkbox" id="checkbox" v-model="checked"> |
多选 checkbox,绑定到同一个数组:
<div id='example-3'> |
new Vue({ |
勾选的名字是:{{ checkedNames }}
radio
<input type="radio" id="one" value="One" v-model="picked"> |
选中的是:{{ picked }}
select
单选 select:
<select v-model="selected"> |
new Vue({ |
如果 v-model
表达式的初始值,不能与任何 option 选项匹配,<select>
元素将会渲染为“未选中”状态。在 iOS 中,这会导致用户无法选中第一项,因为在这种“未选中”状态的情况下,iOS 不会触发 change 事件。因此,推荐按照上面的示例,预先提供一个 value 为空字符串的禁用状态的 option 选项。
多选 select(绑定到一个数组):
<select v-model="selected" multiple> |
选中的是:{{ selected }}
使用 v-for
渲染动态的 option:
<select v-model="selected"> |
new Vue({ |
与 value 属性绑定
对于 radio, checkbox 和 select 的 option 选项,通常可以将 v-model
与值是静态字符串的 value 属性关联在一起(或者,在 checkbox 中,绑定到布尔值):
<!-- 当选中时,`picked` 的值是字符串 "a"(译者注:如果没有 value 属性,选中时值是 null) --> |
然而,有时可能需要把 value 与 Vue 实例上的一个动态属性绑定在一起。这时我们可以通过 v-bind
来实现。v-bind
还允许我们将 input 元素的值绑定到非字符串值。
checkbox
<input |
// 选中时: |
true-value
和 false-value
属性不会影响到 input 元素的 value
属性,这是因为浏览器在提交表单时,并不会包含未被选中的 checkbox 的值。如果要确保表单中,这两个值的一个能够被提交(例如 “yes” 或 “no”),请换用类型是 radio 的 input 元素。
radio
<input type="radio" v-model="pick" v-bind:value="a"> |
// 选中时 |
select 选项
<select v-model="selected"> |
// 选中时: |
修饰符(modifiers)
.lazy
默认情况下,v-model
会在每次 input
事件触发之后,将数据同步至 input 元素中(除了上述提到的输入法组合文字时不会)。可以添加 lazy
修饰符,从而转为在触发 change
事件后同步:
<!-- 在触发 "change" 事件后同步,而不是在触发 "input" 事件后更新 --> |
.number
如果想要将用户的输入,自动转换为 Number 类型(译注:如果转换结果为 NaN 则返回字符串类型的输入值),可以在 v-model
之后添加一个 number
修饰符,来处理输入值:
<input v-model.number="age" type="number"> |
这通常很有用,因为即使是在 type="number"
时,HTML 中 input 元素也总是返回一个字符串类型的值。
.trim
如果想要将用户的输入,自动过滤掉首尾空格,可以在 v-model
之后添加一个 trim
修饰符,来处理输入值:
<input v-model.trim="msg"> |
在组件上使用 v-model
如果你还不熟悉 Vue 组件,现在先跳过此处。
HTML 内置的几种 input 类型有时并不总能满足需求。幸运的是,使用 Vue 可以创建出可复用的输入框组件,并且能够完全自定义组件的行为。这些输入框组件甚至可以使用 v-model
!想要了解更多信息,请阅读组件指南中自定义输入框)。