tft每日頭條

 > 生活

 > vue的雙向數據綁定怎麼實現

vue的雙向數據綁定怎麼實現

生活 更新时间:2024-09-18 19:26:03

vue的興起源于入手簡單,對數據的雙向綁定,

以及語法的友好性.相對于react的最大優勢大概就是數據的雙向綁定了.但是你知道雙向綁定到底是如何實現的嗎?

可能你會說的Object.defineProperty()來實現的.确實沒錯 但是這隻是實現了數據的單向綁定還需要結合訂閱發布來實現.

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div> <input type="text" id='input'> <p id='p'></p> </div> </body> </html>

先簡單的實現一個頁面輸入框

vue的雙向數據綁定怎麼實現(簡單實現vue的雙向綁定)1

頁面顯示

在實現雙向綁定前,我們先熟悉一下Object.defineProperty()語法,MDN給出的解釋Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 并返回這個對象。

Object.defineProperty(obj, prop, descriptor) obj 要在其上定義屬性的對象。 prop 要定義或修改的屬性的名稱。 descriptor 将被定義或修改的屬性描述符。

我們現在需要好好了解一下descriptor, 屬性描述描述什麼呢? 數據的變化是否可讀寫,是否可以删除等等 是對于我們定義的obj.prop的一個描述.descriptor函數内部包含set 與 get

get當有該屬性的的時候會發生,

set當數據變動的時候發生改變默認值為undefined

擁有以上屬性的時候我們就可以開始設計了

const data = {};//定義一個對象 let _data = null//存儲數據綁定後的值 防止死循環 const input = document.getElementById('input');//獲取input框 const p = document.getElementById('p');//獲取p的行展示通過input改變的數據層 Object.defineProperty(data, 'text', { //設置定義data的對象和text屬性 set(value) { console.log(value) //當data數據層的值複制給input框 // data.text = value input.value = value _data = value }, get() { return _data } }); input.onchange = function (e) { data.text = e.target.value; p.innerHTML = data.text //将input改變視圖層的值賦值給數據層并展示出來 }

vue的雙向數據綁定怎麼實現(簡單實現vue的雙向綁定)2

輸入input時候p标簽也改變了說明視圖層已經改變數據層

視圖層到數據層确定ok

vue的雙向數據綁定怎麼實現(簡單實現vue的雙向綁定)3

在浏覽器中輸入改變data中的text屬性頁面的input同樣也改變了

數據層到視圖層同樣ok

vue則是通過這樣的思路去實現框架中的綁定.想深入了解的同學建議去看源碼,vue需要對對象的深層次遞歸遍曆來進行綁定.

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved