這篇文章主要記錄學習 JS 雙向綁定過程中的一些概念與具體的實現

MVVM 具體概念
MVVM 中有一些概念是通用的,具體如下
Directive (指令)
自定義的執行函數,例如 Vue 中的 v-click、v-bind 等。這些函數封裝了 DOM 的一些基本可復用函數API。
Filter (過濾器)
用戶希望對傳入的初始數據進行處理,然后將處理結果交給 Directive 或者下一個 Filter。例如:v-bind="time | formatTime"。formatTime 是將 time 轉換成指定格式的 Filter 函數。
表達式
類似前端普通的頁面模板表達式,作用是控制頁面內容安裝具體的條件顯示。例如:if...else 等
ViewModel
傳入的 Model 數據在內存中存放,提供一些基本的操作 API 給開發者,使其能夠對數據進行讀取與修改
雙向綁定(數據變更檢測)
View 層的變化改變 Model:通過給元素添加 onchange 事件來觸發對 Model 數據進行修改
Model 層的變化改變 View:
實現方式
手動觸發綁定
即 Model 對象改變之后,需要顯示的去觸發 View 的更新
首先編寫 HTML 頁面
Two way binding
編寫實現 MVVM 的 代碼
// Manual trigger
let elems = [document.getElementById('el'), document.getElementById('input')]
// 數據 Model
let data = {
value: 'hello'
}
// 定義 Directive
let directive = {
text: function(text) {
this.innerHTML = text
},
value: function(value) {
this.setAttribute('value', value)
this.value = value
}
}
// 掃描所有的元素
function scan() {
// 掃描帶指令的節點屬性
for (let elem of elems) {
elem.directive = []
for (let attr of elem.attributes) {
if (attr.nodeName.indexOf('q-') >= 0) {
directive[attr.nodeName.slice(2)].call(elem, data[attr.nodeValue])
elem.directive.push(attr.nodeName.slice(2))
}
}
}
}
// ViewModel 更新函數
function ViewModelSet(key, value) {
// 修改數據對象后
data[key] = value
// 手動地去觸發 View 的修改
scan()
}
// View 綁定監聽
elems[1].addEventListener('keyup', function(e) {
ViewModelSet('value', e.target.value)
}, false)
// -------- 程序執行 -------
scan()
setTimeout(() => {
ViewModelSet('value', 'hello world')
}, 1000);
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
新聞名稱:MVVM雙向綁定的實現代碼-創新互聯
URL網址:http://www.yijiale78.com/article38/cchppp.html
成都網站建設公司_創新互聯,為您提供微信小程序、用戶體驗、品牌網站設計、虛擬主機、外貿建站、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯