最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談vue實(shí)現(xiàn)雙向事件綁定v-model的原理

 更新時(shí)間:2021年08月02日 16:20:08   作者:noBug123  
vue使用v-model實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,它會(huì)根據(jù)控件類(lèi)型自動(dòng)選取正確的方法來(lái)更新元素,本文就詳細(xì)的介紹一下原理,感興趣的可以了解一下

與js或者jquery直接改變操作dom不同,vue使用v-model實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,它會(huì)根據(jù)控件類(lèi)型自動(dòng)選取正確的方法來(lái)更新元素。

v-model就是vue的雙向綁定的指令,能將頁(yè)面上控件輸入的值同步更新到相關(guān)綁定的data屬性,也會(huì)在更新data綁定屬性時(shí)候,更新頁(yè)面上輸入控件的值

官方文檔這么解釋:

v-model只不過(guò)是一個(gè)語(yǔ)法糖而已,真正的實(shí)現(xiàn)靠的還是

  • v-bind:綁定響應(yīng)式數(shù)據(jù)
  • 觸發(fā) input 事件 并傳遞數(shù)據(jù) (核心和重點(diǎn))

如下代碼

<input v-model="txt"> 

本質(zhì)上是

<input :value="txt" @input="txt = $event.target.value">

解釋:

初始化vue實(shí)例時(shí)候,會(huì)遞歸遍歷data的每一個(gè)屬性,并且通過(guò)defineProperty來(lái)監(jiān)聽(tīng)每一個(gè)屬性的get,set方法,從而一旦某個(gè)屬性重新賦值,則能監(jiān)聽(tīng)到變化來(lái)操作相應(yīng)的頁(yè)面控制

看下方代碼:

Object.defineProperty(data,"name",{
        get(){
            return data["name"];
        },
        set(newVal){
            let val=data["name"];
            if (val===newVal){
                return;
            }
            data["name"]=newVal;
            // 監(jiān)聽(tīng)到了屬性值的變化,假如node是其對(duì)應(yīng)的input節(jié)點(diǎn)
            node.value=newVal;
        }    
    })

總結(jié)

一方面modal層通過(guò)Object.defineProperty來(lái)劫持每個(gè)屬性,一旦監(jiān)聽(tīng)到變化通過(guò)相關(guān)的頁(yè)面元素更新。另一方面通過(guò)編譯模板文件,為控件的v-model綁定input事件,從而頁(yè)面輸入能實(shí)時(shí)更新相關(guān)data屬性值

那么Object.defineProperty是用來(lái)控制一個(gè)對(duì)象屬性的一些特有操作,比如讀寫(xiě)權(quán)、是否可以枚舉,這里我們主要先來(lái)研究下它對(duì)應(yīng)的兩個(gè)描述屬性get和set,v-model其實(shí)是對(duì)其get和set進(jìn)行重寫(xiě)操作,get就是在讀取name屬性這個(gè)值觸發(fā)的函數(shù),set就是在設(shè)置name屬性這個(gè)值觸發(fā)的函數(shù)

補(bǔ)充

v-model修飾符:.lazy、.trim和.number

lazy :在每次 input 事件觸發(fā)后將輸入框的值與數(shù)據(jù)進(jìn)行同步,添加 lazy 修飾符,從而轉(zhuǎn)變?yōu)槭褂?change 事件進(jìn)行同步

<input v-model.lazy="msg">

trim :去除字符串首尾的空格

<input v-model.trim="msg">

number :將數(shù)據(jù)轉(zhuǎn)化為值類(lèi)型

<input v-model.number="msg">

到此這篇關(guān)于淺談vue實(shí)現(xiàn)雙向事件綁定v-model的原理的文章就介紹到這了,更多相關(guān)vue 雙向事件綁定v-model內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue項(xiàng)目打包部署后瀏覽器自動(dòng)清除緩存問(wèn)題的解決方法

    Vue項(xiàng)目打包部署后瀏覽器自動(dòng)清除緩存問(wèn)題的解決方法

    這篇文章主要介紹了vue打包部署后 瀏覽器緩存問(wèn)題,導(dǎo)致控制臺(tái)報(bào)錯(cuò)ChunkLoadError: Loading chunk failed的解決方案,文中有相關(guān)的圖文和代碼供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-12-12
  • 基于vue1和vue2獲取dom元素的方法

    基于vue1和vue2獲取dom元素的方法

    下面小編就為大家分享一篇基于vue1和vue2獲取dom元素的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 使用Vue完成一個(gè)簡(jiǎn)單的todolist的方法

    使用Vue完成一個(gè)簡(jiǎn)單的todolist的方法

    本篇文章主要介紹了使用Vue完成一個(gè)簡(jiǎn)單的todolist的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • vite打包出現(xiàn)?"default"?is?not?exported?by?"node_modules/...問(wèn)題解決辦法

    vite打包出現(xiàn)?"default"?is?not?exported?by?"

    這篇文章主要給大家介紹了關(guān)于vite打包出現(xiàn)?"default"?is?not?exported?by?"node_modules/...問(wèn)題的解決辦法,文中通過(guò)代碼將解決的辦法介紹的非常詳細(xì),對(duì)同樣遇到這個(gè)問(wèn)題的朋友具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-06-06
  • Vue中的默認(rèn)插槽詳解

    Vue中的默認(rèn)插槽詳解

    在 Vue 中,插槽(Slot)是一種非常強(qiáng)大且靈活的機(jī)制,用于在組件中插入內(nèi)容,默認(rèn)插槽是在父組件中傳遞內(nèi)容給子組件時(shí)使用的一種方式,這篇文章主要介紹了Vue中的默認(rèn)插槽詳解,需要的朋友可以參考下
    2024-01-01
  • Vue3全局掛載使用Axios學(xué)習(xí)實(shí)戰(zhàn)

    Vue3全局掛載使用Axios學(xué)習(xí)實(shí)戰(zhàn)

    這篇文章主要為大家介紹了Vue3全局掛載使用Axios學(xué)習(xí)實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 一文詳解Vue中如何實(shí)現(xiàn)頁(yè)面骨架屏

    一文詳解Vue中如何實(shí)現(xiàn)頁(yè)面骨架屏

    為了提升頁(yè)面加載速度,我們可以使用頁(yè)面骨架屏技術(shù)來(lái)優(yōu)化用戶感知,下面就跟隨小編一起學(xué)習(xí)一下如何在vue中實(shí)現(xiàn)頁(yè)面骨架屏吧
    2024-03-03
  • VScode格式化ESlint方法(最全最好用方法)

    VScode格式化ESlint方法(最全最好用方法)

    這篇文章主要介紹了VScode格式化ESlint方法(最全最好用方法),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • vue中使用keep-alive動(dòng)態(tài)刪除已緩存組件方式

    vue中使用keep-alive動(dòng)態(tài)刪除已緩存組件方式

    這篇文章主要介紹了vue中使用keep-alive動(dòng)態(tài)刪除已緩存組件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue拖拽組件列表實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面配置功能

    Vue拖拽組件列表實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面配置功能

    這篇文章主要介紹了Vue拖拽組件列表實(shí)現(xiàn)動(dòng)態(tài)頁(yè)面配置功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

元江| 华亭县| 沧州市| 莒南县| 新野县| 崇左市| 双辽市| 岳普湖县| 油尖旺区| 凤山县| 青河县| 靖安县| 无锡市| 丰台区| 乌拉特中旗| 花莲县| 易门县| 正镶白旗| 新建县| 蛟河市| 连平县| 沙坪坝区| 陇南市| 海晏县| 德令哈市| 闽侯县| 天峨县| 永丰县| 巴中市| 屏山县| 内乡县| 长宁区| 香港 | 财经| 三台县| 兴宁市| 平泉县| 连山| 阿图什市| 九寨沟县| 萝北县|