vue2.0的雙向資料繫結主要實現方式就是: 發布訂閱 + 資料劫持
這裡來手寫乙個實現過程,
// 發布訂閱 + 資料劫持
// 訂閱器模型
let dep = , // 為何不是陣列? 深拷貝與淺拷貝,使用陣列需要key來進行查值
// 新增訂閱者
listen: function (key, fn) ,
// 發布訊息
trigger: function ()
// vue 原始碼寫法
for (let i = 0, fn; fn = fns[i++];)
}}// 資料劫持
let datahijack = function () ,
set: function (newvalue)
});dep.listen(tag, function (text) );
}
將js引入html中,
可訂閱檢視1
可訂閱檢視2
開啟瀏覽器console面板,鍵入 dataobj.one = "路飛"; dataobj.two = "索隆"; 就可以看到頁面發生的變化了。
這裡說一下我遇到的問題,uncaught typeerror: object.defineproperty called on non-object
報錯原因是,給object.defineproperty傳參的資料型別不對,
最後在html裡面,發現dataobj定義的是字串,而不是物件,這裡是需要乙個物件型別的。
vue響應式布局 Vue 響應式原理
vue2 的資料偵測 在 src observer 目錄裡面,元件例項在初始化時,會呼叫 observe 函式處理 data function initdata vm observe 改寫了所有物件屬性的 getter setter 和陣列原型上的 7 個會改寫陣列方法,從而讓 data 變成可響應...
vue響應式原理
響應式系統是vue框架核心的部分,資料物件僅僅是普通的 js物件。當我們改變資料時,檢視也會被改變,本文就來 一下vue 的響應式原理。vue響應式的核心是使用了es5 新增的api object.defineproperty 因此vue不支援ie8 object.defineproperty的作用...
vue響應式原理
要了解響應式原理首先應該知道什麼是響應式 更改 vue的響應式原理是什麼 vue資料的雙向繫結是通過資料劫持結合發布訂閱模式,偵測到資料變化,然後通過object.defineproperty 物件對每個屬性的getter和setter進行劫持。當讀取 data 中的資料時自動呼叫 get 方法,當...