簡易實現 vue

2021-10-12 21:13:54 字數 2180 閱讀 3939

首先建立乙個 html 檔案

<

!doctype html>

簡易vue雙向繫結<

/title>

"./twoway-bingding.js"

>

<

/script>

// 引入實現vue的檔案

document.

addeventlistener

("domcontentloaded"

,function

(event)})

settimeout

(function()

,3000)}

);<

/script>

<

/head>

>

"str"

>

<

/input>

content of str is:

}<

/p>

<

/div>

<

/body>

<

/html>

建立twoway-bingding.js

function

vue(option)

,set

:function()

})watch

(this

.data)

;// @:監聽資料變化

newcompile

(this

)// @:建立dom和資料間的連線

}function

watch

(data)

object.

keys

(data)

.foreach

(function

(key))}

function

definereactive

(data, key, value)

,set

:function

(newval)})

}// 主題

function

subject()

subject.prototype =

, removeobserver:

function

(obs));

this

.observerlist.

splice

(index);}

, notify:

function()

)}}// 訂閱者

function

observer

(vm, key, cb)

observer.prototype =

, register:

function()

}/**

* 編譯物件

* * @param el - 根節點

* @param vm - vue物件

*/function

compile

(vm)

compile.prototype =

\}$/

for(

var i =

0; i < el.childnodes.length; i++

)}的文字節點

node.textcontent.

replace

(reg,

function

(str, key)

}"替換為data[key]的值

// @:將node註冊為key的觀察者,以便在資料變化時得到通知並作出響應

newobserver

(_this.vm, key,

function

(newval, oldval))}

)}else

if(node.tagname ==

'input'

&& node.

hasattribute

('v-model'))

// @:將node註冊為key的觀察者,以便在資料變化時得到通知並作出響應

newobserver

(_this.vm, key,

function

(newval, oldval))}

}else})

(this)}

},}

08 使用vue實現簡易計算器

charset utf 8 meta 簡易計算器title src script head type text v model n1 v model opration value option value option value option value option select type te...

仿照vue實現簡易的MVVM框架(二)

實現文字插值與s for迴圈模版。對於文字插值的實現,我採用正則去匹配還原這個dom節點,以插值 形式為分界,將這個dom節點的文字分割成多個字串,儲存在this.muscha中,再者,將普通文字字串以陣列形式儲存在string屬性中,將插值存放在text屬性值。當然,拼接的時候要明白先從strin...

仿照vue實現簡易的MVVM框架(一)

主要的方法有 compile 深度遍歷前端介面的節點,將其複製進乙個addquene佇列中 pasers 遍歷所有的節點,並將節點包裝成乙個含有本節點 自定義屬性及屬性值的物件。要想實現雙向繫結,重要的一步是,為自定義s model的節點繫結事件 input框的雙向繫結,監聽oninput事件 ob...