vue動態資料繫結1 如何監聽乙個物件的變化

2021-09-30 14:37:56 字數 1117 閱讀 8172

new observer();

new observer();

// 要實現的結果如下:

data

.name // 你訪問了 name

data

.age =

100; // 你設定了 age,新的值為100

data

.university // 你訪問了 university

data

.major =

'science'

// 你設定了 major,新的值為 science

實現這樣的乙個 observer,要求如下:

傳入引數只考慮物件,不考慮陣列。

new observer返回乙個物件,其 data屬性要能夠訪問到傳遞進去的物件。

通過 data 訪問屬性和設定屬性的時候,均能列印出對應的資訊。

如果傳入引數物件是乙個「比較深」的物件(也就是其屬性值也可能是物件),那該怎麼辦。

要實現上述目標,首先要定義乙個物件的建構函式,然後定義原型方法,遍歷物件本身的各個屬性,並為每個屬性繫結get和set方法。考慮到第4個問題,在程式中加入了遞迴的思想。

實現**如下:

// 首先定義觀察者建構函式

function

observer

(data)

// walk()函式用於深層次遍歷物件的各個屬性

// 採用的是遞迴的思路

// 因為我們要為物件的每乙個屬性繫結get和set

observer.prototype.walk = function

(obj)

this.convert(key,val);}}

};// 以自定義get和set函式

observer.prototype.convert = function

(key,val),

set:function

(newval);

val = newval;}})

};let data=,

address: "成都"

};

如上圖所示:無論是訪問乙個簡單值或者是乙個深層次的物件,都可以很好響應getter 和 setter。

Vue如何實現資料雙向繫結

說明 index.html lang en head p p v text msg p v text car.color p v html msg p v html car.color p type text v model msg v on click clickfn 點我button div...

vue如何實現雙向資料繫結?

vue中實現資料繫結的乙個重要點 text id a b span var obj object.defineproperty obj,test 需要新增keyup事件去監聽,不然就不知道已經發生了改變。document.addeventlistener keyup function e scrip...

vue實戰學習教程1 監聽 樣式繫結 篩選過濾排序

vue中計算 監聽 樣式繫結 style 篩選 過濾 排序等,歸納總結了一下。bgblue bgyellow style head myvue v for s,index in students click deletestudensindex index 刪除button click updeta...