vue-双向绑定

一、双向绑定

问题:用:只能进行单向绑定(Model(data) -> View(html))
如果用:绑定表单元素的值,则用户修改表单元素的内容,无法自动修改data中的模型变量。意味着vue中永远拿不到用户在界面中修改的新值。

解决:今后凡是绑定(可输入,可选择的)表单元素,必须用双向绑定,才能在界面修改时,自动更新data中的数据。

双向绑定:既能(Model(data) -> View(html)),data中变化,页面自动跟随变化。
又能View(html) -> Model(data),页面中变化,data中的变量自动跟随变化。
如何使用双向绑定:v-model~~:value~~ =“变量”
简写:因为几乎所有表单元素都用value属性控制元素的内容或值,所以,几乎所有v-model都绑定value属性,所以可简写为:v-model="变量"

:
<div id="app">
    <input v-model:input="kwords">
    <button @click="search">百度一下</button>
</div>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            kwords: 'iphoneX'
        },
        methods: {
            search() {
                console.log(`查询${this.kwords}相关的内容...`)
            }
        }
    })
</script>

在这里插入图片描述

1、radio

绑定时:用data中sex的值和每个radio的提前写死的value值做比较,如果哪个radio的value值刚好等于data中sex的值就选中,其余不选中
修改时:用当前选中的radio的写死的value,反向赋值回data中的sex上

例:
<div id="app">
    <input type="radio" name="sex" v-model="sex" value="1"><input type="radio" name="sex" v-model="sex" value="0"><h1>{{sex==1?'男':'女'}}</h1>
</div>

data: {
    sex: 0
}

例:

<div id="app">
    <div class="tac">
        <img :src="`../img/${chosen}`" alt="">
    </div>
    <hr>
    <div class="tac">
        <label v-for="p of planes">
            <input type="radio" v-model="chosen" name="plane" :value="p">
            <img :src="`../img/${p}`">
        </label>
    </div>
</div>
data: {
    planes: ["p3.png", "p4.png", "p5.png"],
    chosen: 'p0.png'
}

2、select

特殊:每个option的value都是提前写死的,变得只是option的selected属性,变的只是选中的option是哪个。

例如:

<select v-model="city">
	<option value="bj.jpg"></option>
	<option value="hz.jpg"></option>
	<option value="sh.jpg"></option>
</select>

其实:v-model=“city” 其实仅仅起到一个绑定连接的作用,不具体绑定某一个属性值。
绑定时:用data中city变量的值和每个option中的写死的value做比较。如果data中city变量的值等于option中写死的value的值,则当前option就选中。其余option就不选中。
修改时:用当前选中项的写死的value,反向更新回data中的city中的变量
原理:v-model="city"其实,不具体绑定修改元素某个属性的值。而是为元素添加修改事件,比如onchange,oninput等。在事件处理函数中修改new Vue对象中的模型变量的值。进一步触发模型变量的set方法,触发通知,引起其他使用该变量的元素的状态的改变。

例:
<div id="app">
    <select v-model="city">
        <option value="bj.jpg">北京</option>
        <option value="hz.jpg">杭州</option>
        <option value="sh.jpg">上海</option>
    </select>
    <br/>
    <img :src="`../img/${city}`" alt="">
</div>

data: {
    city: 'hz.jpg'
}

3、checkbox

单选时,变化的只是checked属性。
何时:如果希望用checkbox控制一个bool类型的变量值时。
如何

<input type="checkbox" v-model="isAgree">同意

data:{
	isAgree:false
}

绑定时:根据isAgree的值,决定checkbox的checked状态
修改时:用当前checkbox的checked状态,更新data中的isAgree

onchange=function(){
	vm.isAgree = this.checked
}
例:
<div id="app">
    姓名:<input :disabled="!isAgree"><br> 密码:
    <input :disabled="!isAgree"><br>
    <input type="checkbox" v-model="isAgree">同意<br>
    <button :disabled="!isAgree">注册</button>
</div>

data: {
    isAgree: false
}

4、双向绑定中可用watch机制,实时获得修改的新变量值:

何时:只要希望边修改边实时执行操作时:
如何

data:{
	kwords:""
}
watch:{
	//和被监视的变量同名的元素
	kwords(function(){
		//执行操作
	})
}

只要通过斜体手段修改一次kwords变量的值,都会立刻触发一次kwords()函数,执行一次操作。

例:
<div id="app">
    <input v-model:input="kwords" @keyup.13="search">
    <button @click="search">百度一下</button>
</div>

data: {
    kwords: ''
},
methods: {
    search() {
        console.log(`查询${this.kwords}相关的内容...`)
    }
},
watch: {
    kwords() {
        this.search();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值