欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

官方文檔這么解釋:

v-model只不過是一個語法糖而已,真正的實現(xiàn)靠的還是

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

如下代碼

<input v-model="txt"> 

本質(zhì)上是

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

解釋:

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

看下方代碼:

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

總結(jié)

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

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

補充

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

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

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

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

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

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

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

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

相關(guān)文章

  • Vue圖片放大鏡組件的封裝使用詳解

    Vue圖片放大鏡組件的封裝使用詳解

    這篇文章主要為大家詳細介紹了Vue圖片放大鏡組件的封裝,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • vue實現(xiàn)下拉框篩選表格數(shù)據(jù)

    vue實現(xiàn)下拉框篩選表格數(shù)據(jù)

    這篇文章主要為大家詳細介紹了vue實現(xiàn)下拉框篩選表格數(shù)據(jù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Vue實現(xiàn)Base64轉(zhuǎn)png、jpg圖片格式

    Vue實現(xiàn)Base64轉(zhuǎn)png、jpg圖片格式

    這篇文章主要給大家介紹了關(guān)于Vue實現(xiàn)Base64轉(zhuǎn)png、jpg圖片格式的相關(guān)資料,前段獲取生成的是base64圖片,需要轉(zhuǎn)化為jpg,png,需要的朋友可以參考下
    2023-09-09
  • vue3使用useMouseInElement實現(xiàn)圖片局部放大預(yù)覽效果實例代碼

    vue3使用useMouseInElement實現(xiàn)圖片局部放大預(yù)覽效果實例代碼

    現(xiàn)在很多的項目里面圖片展示縮略圖,然后點擊實現(xiàn)圖片預(yù)覽,放大的功能,下面這篇文章主要給大家介紹了關(guān)于vue3使用useMouseInElement實現(xiàn)圖片局部放大預(yù)覽效果的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • VUE?項目如何使用?Docker+Nginx進行打包部署

    VUE?項目如何使用?Docker+Nginx進行打包部署

    使用?Docker,你可以創(chuàng)建一個包含?Vue.js?應(yīng)用程序的容器鏡像,并在任何支持?Docker?的環(huán)境中運行該鏡像,這篇文章主要介紹了VUE?項目用?Docker+Nginx進行打包部署,需要的朋友可以參考下
    2024-06-06
  • vue跳轉(zhuǎn)到詳情頁的兩種實現(xiàn)方法

    vue跳轉(zhuǎn)到詳情頁的兩種實現(xiàn)方法

    最近接觸了vue項目,下面這篇文章主要給大家介紹了關(guān)于vue跳轉(zhuǎn)到詳情頁的兩種實現(xiàn)方法,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2023-06-06
  • vue 實現(xiàn)setInterval 創(chuàng)建和銷毀實例

    vue 實現(xiàn)setInterval 創(chuàng)建和銷毀實例

    這篇文章主要介紹了vue 實現(xiàn)setInterval 創(chuàng)建和銷毀實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue.js 上傳圖片實例代碼

    vue.js 上傳圖片實例代碼

    這篇文章主要介紹了vue.js 上傳圖片實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 深入理解Vue生命周期、手動掛載及掛載子組件

    深入理解Vue生命周期、手動掛載及掛載子組件

    本篇文章主要介紹了深入理解Vue生命周期和手動掛載,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 腳手架vue-cli工程webpack的作用和特點

    腳手架vue-cli工程webpack的作用和特點

    webpack是一個模塊打包的工具,它的作用是把互相依賴的模塊處理成靜態(tài)資源。這篇文章主要介紹了vue-cli工程webpack的作用和特點,需要的朋友可以參考下
    2018-09-09

最新評論