电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

詳解vue中v-model和v-bind綁定數(shù)據(jù)的異同

瀏覽:110日期:2022-12-11 10:50:04

vue的模板采用DOM模板,也就是說它的模板可以當(dāng)做DOM節(jié)點(diǎn)運(yùn)行,在瀏覽器下不報(bào)錯(cuò),綁定數(shù)據(jù)有三種方式,一種是插值,也就是{{name}}的形式,一種是v-bind,還有一種是v-model。{{name}}的形式比較好理解,就是以文本的形式和實(shí)例data中對(duì)應(yīng)的屬性進(jìn)行綁定。比如:

var app = new Vue({ el: ’#app’, template: ’<div @click='toggleName'>{{name}}</div>’, data: { name: ’tom’, }, method: { toggleName() { this.name = this.name === ’tom’ ? ’sony’ : ’tom’ }, },})

上面的字符串模板中,有一個(gè){{name}},它和data.name是綁定的,當(dāng)data.name發(fā)生變化時(shí),視圖也發(fā)生變化。

但是v-bind和v-model這兩種綁定比較難區(qū)分,特別是在表單元素中,剛開始會(huì)混淆到底應(yīng)該怎么使用。

v-bind

首先來看下v-bind,它的用法是后面加冒號(hào),跟上html元素的attributions,例如:

<p v-bind:class='classed'>

這里的v-bind:class會(huì)產(chǎn)生什么效果呢?實(shí)際上,首先你可以看下如果不加v-bind:,也就是:<p class='classed'>,這只是一個(gè)普通的p元素,含有一個(gè).classed的類,沒有任何數(shù)據(jù)參與進(jìn)來。

當(dāng)加上v-bind:之后,就不一樣了。它的值classed不是字符串,而是vue實(shí)例對(duì)應(yīng)的data.classed的這個(gè)變量。也就是說data.classed是什么值,它就會(huì)給class屬性傳遞什么值,當(dāng)data.classed發(fā)生變化的時(shí)候,class屬性也發(fā)生變化,這非常適合用在通過css來實(shí)現(xiàn)動(dòng)畫效果的場合。除了class,其他大部分html原始的屬性都可以通過這種方式來綁定,而且為了方便,它可以直接縮寫成冒號(hào)形式,例如:

var app = Vue({ el: ’#app’, template: ’<img :src='http://www.hdgsjgj.cn/bcjs/src'>’, data: { src: ’’, }, beforeMount() { fetch(...).then(...).then(res => this.src = res.src) // 這里修改了data.src },})

上面這段代碼中,默認(rèn)情況下data.src是空字符串,也就說不會(huì)有圖片顯示出來,但是當(dāng)從遠(yuǎn)端獲取到圖片地址之后,更新了data.src,圖片就會(huì)顯示出來了。

v-model

v-model主要是用在表單元素中,它實(shí)現(xiàn)了雙向綁定。雙向綁定大家都非常熟了,簡單的說就是默認(rèn)情況下,它跟上面兩種情況的數(shù)據(jù)綁定是一樣的,實(shí)例的data.name發(fā)生變化的時(shí)候,對(duì)應(yīng)的試圖中也會(huì)發(fā)生變化。但是v-model綁定后,它還會(huì)反過來,在input中手動(dòng)輸入新的內(nèi)容,會(huì)反過來修改data.name的值,如果在視圖中其他地方使用到了data.name,那么這個(gè)地方就會(huì)因?yàn)閐ata.name的變化而變化,從而實(shí)現(xiàn)關(guān)聯(lián)動(dòng)態(tài)效果。下面來舉個(gè)栗子:

var app = Vue({ el: ’#app’, template: ’<label><input v-model='name'>{{name}}</label>’, data: { name: ’’, },})

上面<input>中綁定了name,那么當(dāng)input的value發(fā)生變化時(shí),data.name就會(huì)跟著發(fā)生變化,而data.name變化了{(lán){name}}的地方也會(huì)跟著變化。

v-model是一種雙向綁定,那么也就是說,你綁定的元素得有機(jī)會(huì)改變值。所以實(shí)際上v-model基本上只會(huì)用在input, textarea, select這些表單元素上。

v-bind和v-model混用

有一些情況我們需要v-bind和v-model一起使用。這個(gè)時(shí)候如果不留神,就會(huì)搞亂狀況,分不清哪里應(yīng)該怎么控制。舉個(gè)栗子:

<input :value='name' v-model='body'>

上面就是一個(gè)栗子。data.name和data.body,到底誰跟著誰變呢?甚至,它們會(huì)不會(huì)產(chǎn)生沖突呢?

實(shí)際上它們的關(guān)系和上面的闡述是一樣的,v-bind產(chǎn)生的效果不含有雙向綁定,所以:value的效果就是讓input的value屬性值等于data.name的值,而v-model的效果是使input和data.body建立雙向綁定,因此首先data.body的值會(huì)給input的value屬性,其次,當(dāng)input中輸入的值發(fā)生變化的時(shí)候,data.body還會(huì)跟著改變。

現(xiàn)在的問題是,當(dāng)這兩個(gè)一起使用的時(shí)候,誰都優(yōu)先級(jí)高?誰會(huì)無效?實(shí)驗(yàn)證明,v-model將會(huì)被使用,v-bind這個(gè)時(shí)候無效了,因?yàn)樗媒壎ㄔ趘alue屬性上,如果綁在其他屬性上v-bind是不受影響的。在這種情況下,v-bind失效,即使你修改data.name,input里面不會(huì)有任何變化。

這也說明,v-model建立的雙向綁定對(duì)輸入型元素input, textarea, select等具有優(yōu)先權(quán),會(huì)強(qiáng)制實(shí)行雙向綁定,如果你愿意的話。這說明,在單獨(dú)的input中,同時(shí)使用v-bind和v-model是沒有必要的,雖然不會(huì)造成沖突。

注意上面我說道“單獨(dú)”,也就是說,在一組輸入中,它們又要另當(dāng)別論。一組輸入包括單選組、復(fù)選組、下拉選項(xiàng)、下拉選項(xiàng)組。

<label for='value in options'> <input type='checkbox' :value='value' v-model='selected'></label>

在data中,它們是這樣的:

data: { options: [1, 2, 3, 4, 5], selected: [],}

一組復(fù)選框,或者一組下拉選項(xiàng)組,也就是select mutiple='true'的情況,它們的結(jié)果是一個(gè)數(shù)組,而非單個(gè)值,因此data.selected是一個(gè)數(shù)組,當(dāng)一個(gè)選項(xiàng)被選中之后,這個(gè)選項(xiàng)的value值會(huì)被加入到data.selected中(不是按options里面的順序,而是操作過程中的邏輯)。這個(gè)時(shí)候:value就是有效的,因?yàn)樗硎景裲ptions數(shù)組中對(duì)應(yīng)的選項(xiàng)值傳遞給value,并不是雙向綁定的意思,而只是傳值過去(當(dāng)然,當(dāng)options中對(duì)應(yīng)的值發(fā)生變化時(shí),value值也會(huì)變化)。相當(dāng)于說,v-bind負(fù)責(zé)value的值,v-model負(fù)責(zé)選中狀態(tài)。當(dāng)然,v-model是雙向綁定,界面上你去勾選會(huì)影響data.selected的值,你在程序中操作了data.selected,也會(huì)反過來影響界面。v-model影響的是勾選效果,而v-bind影響的是值。(實(shí)際上,v-bind雖然只是影響值,但是也會(huì)影響勾選效果,比如本來一個(gè)選框是被勾選的,通過v-bind綁定值發(fā)生了變化,那么新來的值就不會(huì)在data.selected中,這個(gè)選項(xiàng)就不會(huì)被勾選。如果沒有被勾選,改變后的值又在data.selected中,那又會(huì)被勾選上。)

注意,只有當(dāng)type='checkbox'是確定的情況下,才會(huì)讓上述情況生效,type值不能是動(dòng)態(tài)值,因?yàn)関-model被多次綁定同一個(gè)變量時(shí),需要去檢查type值,而如果這個(gè)時(shí)候type是動(dòng)態(tài)的,比如用:type='type'進(jìn)行動(dòng)態(tài)綁定,就會(huì)導(dǎo)致模板編譯報(bào)錯(cuò)。

v-model其實(shí)是v-bind和v-on的語法糖

這是vue官方文檔中特別指出的,在閱讀到這一句之前,我還對(duì)此很模糊,當(dāng)閱讀到:

<input v-model='something'>其實(shí)是<input v-bind:value='something' v-on:input='something = $event.target.value'>的語法糖時(shí),這種認(rèn)識(shí)上的模糊就被消除了。

我們這篇文章沒有講到v-on,它其實(shí)就是一個(gè)事件綁定器。我們仔細(xì)閱讀一下<input v-bind:value='something' v-on:input='something = $event.target.value'>,發(fā)現(xiàn)它由兩部分組成:v-bind:value和v-on:input,必須是value屬性和input事件,否則也不會(huì)等價(jià)于v-model,而且input事件里面,正好是something等于當(dāng)前輸入值。

真因?yàn)檫@一原理,v-model瞬間就不再難理解了。

小結(jié)

總之,要區(qū)分v-bind和v-model,只需要記住三句話:

1. v-bind是數(shù)據(jù)綁定,沒有雙向綁定效果,但不一定在表單元素上使用,任何有效元素上都可以使用;2. v-model是雙向綁定,基本上只用在表單元素上;3. 當(dāng)v-bind和v-model同時(shí)用在一個(gè)元素上時(shí),它們各自的作用沒變,但v-model優(yōu)先級(jí)更高,而且需區(qū)分這個(gè)元素是單個(gè)的還是一組出現(xiàn)的。

到此這篇關(guān)于詳解vue中v-model和v-bind綁定數(shù)據(jù)的異同的文章就介紹到這了,更多相關(guān)vue中v-model和v-bind綁定數(shù)據(jù)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 全自动面膜机_面膜折叠机价格_面膜灌装机定制_高速折棉机厂家-深圳市益豪科技有限公司 | 协议书_协议合同格式模板范本大全 | 佛山商标注册_商标注册代理|专利注册申请_商标注册公司_鸿邦知识产权 | 华溶溶出仪-Memmert稳定箱-上海协烁仪器科技有限公司 | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | 宽带办理,电信宽带,移动宽带,联通宽带,电信宽带办理,移动宽带办理,联通宽带办理 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 脑钠肽-白介素4|白介素8试剂盒-研域(上海)化学试剂有限公司 | 10吨无线拉力计-2吨拉力计价格-上海佳宜电子科技有限公司 | 布袋式除尘器|木工除尘器|螺旋输送机|斗式提升机|刮板输送机|除尘器配件-泊头市德佳环保设备 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 烟台金蝶财务软件,烟台网站建设,烟台网络推广 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 安全,主动,被动,柔性,山体滑坡,sns,钢丝绳,边坡,防护网,护栏网,围栏,栏杆,栅栏,厂家 - 护栏网防护网生产厂家 | 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 别墅图纸超市|别墅设计图纸|农村房屋设计图|农村自建房|别墅设计图纸及效果图大全 | 脉冲布袋除尘器_除尘布袋-泊头市净化除尘设备生产厂家 | 谷歌关键词优化-外贸网站优化-Google SEO小语种推广-思亿欧外贸快车 | 股票入门基础知识_股票知识_股票投资大师_格雷厄姆网 | 湖南长沙商标注册专利申请,长沙公司注册代理记账首选美创! | 自动焊锡机_点胶机_螺丝机-锐驰机器人 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 真空吸污车_高压清洗车厂家-程力专用汽车股份有限公司官网 | 深圳昂为官网-气体分析仪,沼气分析仪,动态配气仪,气体传感器厂家 | 自动检重秤-动态称重机-重量分选秤-苏州金钻称重设备系统开发有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 粘度计,数显粘度计,指针旋转粘度计 | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 |