vue原始碼解析2 模板解析

2021-09-23 22:39:50 字數 1521 閱讀 4018

從上節的第<5>步,引出模板解析,將el的所有子節點取出, 新增到乙個新建的文件fragment物件中,對fragment中的所有層次子節點遞迴進行編譯解析處理。

文字節點: 從data中取出表示式對應的屬性值,設定為文字節點的textcontent

元素節點:獲取節點屬性,判斷是否是指令 解析指令

function compile(el, vm) 

}compile.prototype =

return fragment;

},init: function() ,

compileelement: function(el) \}/; // 正則物件(匹配大括號表示式)

if (me.iselementnode(node)) else if (me.istextnode(node) && reg.test(text))

if (node.childnodes && node.childnodes.length)

});},

compile: function(node) else

node.removeattribute(attrname);

}});

},compiletext: function(node, exp) ,

isdirective: function(attr) ,

iseventdirective: function(dir) ,

iselementnode: function(node) ,

istextnode: function(node)

};// 指令處理集合

var compileutil = ,

html: function(node, vm, exp) ,

model: function(node, vm, exp)

me._setvmval(vm, exp, newvalue);

val = newvalue;

});},

class: function(node, vm, exp) ,

// 解析指令的核心方法

bind: function(node, vm, exp, dir) );

},// 事件處理

eventhandler: function(node, vm, exp, dir)

if (eventtype && fn)

},_getvmval: function(vm, exp) );

return val;

},_setvmval: function(vm, exp, value) else

});}

};var updater = ,

htmlupdater: function(node, value) ,

classupdater: function(node, value, oldvalue) ,

modelupdater: function(node, value, oldvalue)

};

Vue原始碼解析

原始碼位置 src core vdom patch.js updatechildren 作用 key的主要作用是高效的更新虛擬dom,原始碼中在patch的過程中,會執行patchvnode,patchvode過程中會執行updatechildren方法,會更新兩個新舊的子元素,通過key可以準確的...

Vue原始碼解析 解析器

vue原始碼解析 解析器 解析器型別 html解析器 文字解析器 注釋解析器 原理 將模版字串按照一定的條件迴圈進行切割,對切割下來的內容進行型別判斷,在生產對應型別的ast節點插入到父節點上,直到切割完畢最終生成一顆ast樹。邏輯概覽 整體邏輯 export function parsehtml ...

Hdfs 原始碼解析(2)

namenode啟動 namenode持久化了檔案和塊之間的對應關係,也就是在namenode資料目錄下的current fsimage目錄,namenode啟動的時候,會將這個檔案載入到記憶體裡。塊和機器的對應關係,namenode並不持久化,也就是說,namenode在啟動的時候,並不知道檔案塊...