类vue将template转vnode全流程,模板为html
<div id="abc"><p class="www">{{msg}}</p><p class="hhh"><span>{{msg1}}</span></p></div>
起始标签的匹配细节vue
<div id="abc">
{tagName: "div", attrs: 0: [" id="abc"", "id", "=", "abc", undefined, undefined, index: 0, input: " id="abc"><p class="www">{{msg}}</p><p class="hhh"><span>{{msg1}}</span></p></div>", groups: undefined], start: 0, end: 14}
attrsMap:{id: "abc"} children:[] parent:undefined tag:"div" type:1
子元素标签的匹配node
因为模板还没遍历完毕,继续执行parseHTML,此时模板git
html = "<p class="www">{{msg}}</p><p class="hhh"><span>{{msg1}}</span></p></div>"
文本匹配github
html = "{{msg}}</p><p class="hhh"><span>{{msg1}}</span></p></div>"
var text = (void 0), rest = (void 0), next = (void 0);
除了防止被重写外,还能够减小字节。void 0代替undefined省3个字节。{type: 2, expression: "_s(msg)+_s(msg)", text: "{{msg}}"}
闭合标签匹配express
处理完该闭合标签后将stack长度减一并把currentParent指向最后一位,即闭合标签的父级,由于此时最高级div标签的elemnet的children已经完成了p标签的导入segmentfault
{attrs:[{…}] attrsList:[{…}] attrsMap:{id: "abc"} children:Array(1)0:{type: 1, tag: "p", attrsList: Array(1), attrsMap: {…}, parent: {…}, …} parent:undefined tag:"div" type:1}
参考文献:Vue源码解析之Template转化为AST
仓库:https://github.com/eeeeeeeaso...数组