阅读完这篇博客你会有如下收获:html
The slotting algorithm assigns nodes of a shadow tree host into slots of that tree.vue
Input HOST -- a shadow tree host Output All child nodes of HOST are slottednode
When each node is assigned to a slot, this slot is also added to the node's destination insertion points list.git
这是w3c web components规范的一个提案,地址位于https://github.com/w3c/webcomponents/blob/gh-pages/proposals/Slots-Proposal.mdgithub
在这个提案中,咱们发现shadow DOM和shadow Tree这两个概念,关于它们的规范,在这里:w3c.github.io/webcomponen…web
mdn上关于shadow DOM的一篇特别好的文章:developer.mozilla.org/en-US/docs/…算法
Shadow DOM : attach a hidden separated DOM to an element.bash
几个shadow DOM的专业术语:ide
Shadow DOM知识点:this
shadow DOM的做用是什么:加强组件内聚性。
An important aspect of web components is encapsulation — being able to keep the markup structure, style, and behavior hidden and separate from other code on the page so that different parts do not clash, and the code can be kept nice and clean.
vue demo: component.vue -> shadow host
<slot></slot>
<slot name="foo"></slot>
<slot name="bar"></slot>
复制代码
page.vue -> shadow Tree
<span>+</span>
<span slot="foo">-</span>
<span slot="bar">2</span>
<span slot="bar">3</span>
复制代码
渲染结果:
渲染结果与slot算法十分契合,可是较为奇怪的是,vue的slot机制,不会生成像w3c web component 的shadow DOM。
web component shadow DOM是下面这样: