这节课我们学习的内容是数据双向绑定,在vue
中我们修改一个变量的值对应依赖的界面也会及时响应发生变化,这是我们经常提到的数据驱动界面,那什么是数据双向绑定呢。我们通过修改变量让界面同步数据,这叫单向绑定,反过来我们还可以通过界面来修改数据让变量自动同步,这种同时绑定同时响应的特性,就叫数据双向绑定。
通过这节课的学习我们可以对数据双向绑定有个更好的理解。
直接开始吧,先来新建一个demo21.html
文件,复制一下hello world
代码。
一个简单数据双向绑定
我们先来改造一下template
模板,我们想要在界面去修改变量,无非就是通过input
这些表单输入控件去实现。所以我们在template
里面来添加一个<input/>
,然后来修改一下message
把这个变量改成name
,改不改也无所谓,只是让它看起来更像一个表单的字段。然后再template也要把它改成name
,顺便咱们再用一个div
来包裹一下。
const app = Vue.createApp({
data() {
return {
name: "hello world!"
}
},
template: `
<div>
<div>{{name}}</div>
<input/>
</div>`
})
在input上使用 v-model
把变量name
就给它绑定上。
<input v-model="name" />
这样就实现了一个最简单的数据双向绑定,我们打开浏览器看看效果。
一打开,input
里面就被填充了变量name
的值,这时候在input
里面修改一下,我们看到外面渲染hello world
也会随之改变,这就表示变量name
的值和input
输入值被绑定在了一起。已经是一条船上的蚂蚱了。
textarea数据双向绑定
v-model
支持绑定所有form
表单输入控制,我来看看 textarea
绑定的效果。
在template
中,我们再来添加一个 textarea
同样我们也用textarea
给它绑定上name
,为了成行显示,我们再给它套个div
。
template: `
<div>
<div>{{name}}</div>
<div><input v-model="name" /></div>
<div><textarea v-model="name"/></div>
</div>`
checkbox数据双向绑定
checkbox
复选框它只支持两种值,true
和false
。我们新添加一个变量checked
默认false
(未选中),然后在template
中来添加一个checkbox
,把它和checked
变量进行数据双向绑定,在旁边顺便再渲染出来方便观察它的变化。
template: `
<div>
<div>{{name}}</div>
<div><input v-model="name" /></div>
<div><textarea v-model="name"/></div>
<div>{{checked}}<input type="checkbox" v-model="checked"/></div>
</div>`
另外checkbox
数据双向绑定 也支持多选,注释template
,重新写一个。我们写一堆选项,
比如以兴趣爱好的选项来举个例子,分别弄几个选项意思意思就行。然后我们还要来添加一个变量 likes
它得是一个数组因为是多选嘛,所以得是一个数组,然后都给每一个checkbox
绑定起来就行了
template:`
<div>
<div>{{likes}}</div>
钓鱼<input type="checkbox" v-model="likes" value="钓鱼"/>
游泳<input type="checkbox" v-model="likes" value="游泳"/>
打篮球<input type="checkbox" v-model="likes" value="打篮球"/>
看电影<input type="checkbox" v-model="likes" value="看电影"/>
</div>
`
看看效果吧。
radio数据双向绑定
这个我们不多举例子了,居然checkbox
我都做了,做一个单项那还不简单,直接把checkbox
改成radio
,但是因为是单项,我们就没有必要它绑定一个数组了,我们重新来添加一个变量,like
是个空字符串 把likes
换成like
行了。
template:`
<div>
<div>{{like}}</div>
钓鱼<input type="radio" v-model="like" value="钓鱼"/>
游泳<input type="radio" v-model="like" value="游泳"/>
打篮球<input type="radio" v-model="like" value="打篮球"/>
看电影<input type="radio" v-model="like" value="看电影"/>
</div>
`
select下拉选择框数据双向绑定
我们再来看一下 select
数据双向绑定,学到这了大家应该都能实现了吧,我们再一起来做一个。先来写一个选择框,给它和like
进行双向绑定。 在上面渲染like
看一下结果。
template:`
<div>{{like}}</div>
<select v-model="like">
<option>钓鱼</option>
<option>游泳</option>
<option>打篮球</option>
</select>
`
好了,就先到这吧,改天我们继续。