使用訪問器屬性,模擬Vue的繫結原理

2021-10-09 14:09:42 字數 1311 閱讀 7486

有這樣一段html

>

welcomeh1

>

>

積分:}h2

>

>

使用者名稱:}h1

>

>

積分:}h2

>

1、改造data物件中的屬性,並通過訪問器屬性對每個變數進行保護

var data =

2、遍歷真實dom樹,並建立虛擬dom樹->乙個陣列,記錄可能會發生改變的元素

3、當元素發生改變時,通知虛擬dom樹,虛擬dom樹對比變化,將變化的值修改到真實dom樹上

var data =/*

* 改造data為訪問器屬性

*///獲取data裡的全部屬性名

var keys = object.

keys

(data)

console.

log(keys)

//array['uanme','score']

//遍歷data中每個屬性

for(

var key of keys)

,//用乙個和當前屬性同名的訪問器屬性,代替data中原普通屬性

[key]:}`

]}//return this['_uname']

set(value)`]

= value // this['_uname']=value

//發出通知給虛擬dom樹

change

(key)

} enumerable:

true}}

)})(key)}/

** 構建虛擬dom樹

*///準備陣列儲存所有可能受影響的元素

var arr =

// 建立虛擬dom樹

function

getchildren

(parent)

else

}包裹的變數,就新增進虛擬dom樹

if(c.innerhtml ==

`}}`))

//首次填充頁面內容

c.innerhtml = data[key]}}

}}}// 遍歷body

getchildren

(document.body)/*

* 通知函式

*/function

change

(key)

}}`)}}

object.

seal

(data)

vue的屬性繫結和雙向資料繫結

屬性繫結 v bind屬性繫結,使用如下,為div繫結了乙個title屬性 dell lee title hello world div v bind 可以縮寫為 dell lee title hello world div 雙向資料繫結 v model一般用於input等表單元素,例項裡的資料改變...

vue中v model使用計算屬性,雙向繫結失效

在vue中v model繫結了乙個值到val中,用到了計算屬性監測val的變化,但是使用了computed之後,v model的雙向繫結失效 輸入位址之後再輸入下面其他input值,位址值變為空,列印this.address為空 後來在計算屬性中加入get和set解決了雙向繫結問題 computed...

Vue 計算屬性,偵聽器的使用

偵聽器是用來檢測資料變化從而新增自己自定義邏輯的 這一點和計算屬性很相似,計算屬性一般作用於簡單的一些小邏輯 如果邏輯比較複雜可以使用偵聽器,注意的是偵聽器效能方面比不上計算屬性。watch偵聽器執行結果 改變偵聽器值 對於任何複雜邏輯,你都應當使用計算屬性。在乙個計算屬性裡可以完成各種複雜的邏輯,...