html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文档标题</title>
</head>
<body>
<div>普通的dom节点</div>
<div id="container">
<p slot="p1">我是container内原有的dom子节点11,可以理解为一条数据,按顺序插入到对应的slot中</p>
<p slot="p2">我是container内原有的dom子节点24,可以理解为一条数据,按顺序插入到对应的slot中</p>
<p slot="p1">我是container内原有的dom子节点11,可以理解为一条数据,按顺序插入到对应的slot中</p>
<p slot="p2">我是container内原有的dom子节点p22,可以理解为一条数据,按顺序插入到对应的slot中</p>
<p slot="p2">我是container内原有的dom子节点p21,可以理解为一条数据,按顺序插入到对应的slot中</p>
<p slot="p1">我是container内原有的dom子节点12,可以理解为一条数据,按顺序插入到对应的slot中</p>
<p slot="p2">我是container内原有的dom子节点p23,可以理解为一条数据,按顺序插入到对应的slot中</p>
</div>
</body>
</html>
javascript:
const container = document.querySelector('#container'); // shadow host
const shadow = container.attachShadow({ mode: 'open' }); // shadow root
shadow.innerHTML = `slot begin
<slot name="p1"></slot><slot name="p2"></slot><slot name="p3"></slot>slot end`;
显示:
可以看到,#container实际显示的是js中的slot begin 到 slot end 的内容
原#container内的内容可以理解为被转换成一条一条的数据插入了slot begin 到 slot end 之间的slot中
对应关系为 slot=“p1” ->slot name=“p1”
即,本来html提供的是模板,js提供数据,而现在html提供的是数据,js提供了数据呈现的模板。