(
el, //ast对象或者虚拟dom
state //渲染虚拟dom的一些方法
)
| 14731 | |
| 14732 | //根据el判断是否是组件,或者是否含有v-once,v-if,v-for,是否有template属性,或者是slot插槽,转换style,css等转换成虚拟dom需要渲染的参数函数 |
| 14733 | function genElement( |
| 14734 | el, //ast对象或者虚拟dom |
| 14735 | state //渲染虚拟dom的一些方法 |
| 14736 | ) { |
| 14737 | console.log(state) |
| 14738 | console.log(el) |
| 14739 | |
| 14740 | |
| 14741 | |
| 14742 | if (el.staticRoot && !el.staticProcessed) { |
| 14743 | //将子节点导出虚拟dom 渲染函数的参数形式。静态渲染 |
| 14744 | return genStatic(el, state) |
| 14745 | } else if (el.once && !el.onceProcessed) { |
| 14746 | //参考文档 https://cn.vuejs.org/v2/api/#v-once |
| 14747 | // v-once |
| 14748 | // 不需要表达式 |
| 14749 | // 详细:只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能 |
| 14750 | // <!-- 单个元素 --> |
| 14751 | // <span v-once>This will never change: {{msg}}</span> |
| 14752 | return genOnce(el, state); |
| 14753 | } else if (el.for && !el.forProcessed) { |
| 14754 | // v-for |
| 14755 | //判断标签是否含有v-for属性 解析v-for指令中的参数 并且返回 虚拟dom需要的参数js渲染函数 |
| 14756 | return genFor(el, state) |
| 14757 | } else if (el.if && !el.ifProcessed) { //判断标签是否有if属性 |
| 14758 | // v-if |
| 14759 | //判断标签是否含有if属性 解析 if指令中的参数 并且返回 虚拟dom需要的参数js渲染函数 |
| 14760 | return genIf(el, state) |
| 14761 | } else if (el.tag === 'template' && !el.slotTarget) { |
| 14762 | //标签是模板template |
| 14763 | //获取虚拟dom子节点 |
| 14764 | return genChildren(el, state) || 'void 0' |
| 14765 | } else if (el.tag === 'slot') { |
| 14766 | //如果标签是插槽 |
| 14767 | return genSlot(el, state) |
| 14768 | } else { |
| 14769 | // component or element |
| 14770 | //组件或元素 |
| 14771 | var code; |
| 14772 | if (el.component) { //如果是组件 |
| 14773 | |
| 14774 | //创建一个虚拟dom 的参数渲染的函数 |
| 14775 | code = genComponent( |
| 14776 | el.component, |
| 14777 | el, |
| 14778 | state |
| 14779 | ); |
| 14780 | } else { |
| 14781 | |
| 14782 | var data = el.plain ? //如果标签中没有属性则这个标志为真 |
| 14783 | undefined : |
| 14784 | genData$2(el, state); |
| 14785 | |
| 14786 | var children = el.inlineTemplate ? //是不是内联模板标签 |
| 14787 | null : |
| 14788 | genChildren(el, state, true); |
| 14789 | code = "_c('" + (el.tag) + "'" + (data ? ("," + data) : '') + (children ? ("," + children) : '') + ")"; |
| 14790 | } |
no test coverage detected