從上節的第<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在啟動的時候,並不知道檔案塊...