_
2023/5/11 18:36:464289

这节课我们学习的内容是数据双向绑定,在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 复选框它只支持两种值,truefalse。我们新添加一个变量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>  
        `

好了,就先到这吧,改天我们继续。

视频讲解