【发布时间】:2021-10-11 23:31:01
【问题描述】:
关于原生WebComponents:
在class 开头的constructor() 方法中,通常会将影子DOM 树附加到Custom Element 并返回对其ShadowRoot 的引用:
class myCustomElement extends HTMLElement {
constructor() {
super();
const shadowroot = this.attachShadow({mode: 'open'});
}
[... REST OF CODE HERE...]
}
引用的名称当然可以是任何东西。
我见过:
-
var shadow = this.attachShadow({mode: 'open'});(见:Element.attachShadow()) this.root = this.attachShadow({mode: 'open'});
我们可以很容易地使用:
const myShadowRootzzz = this.attachShadow({mode: 'open'});
但是,已经存在Element.shadowRoot,这是ShadowRoot参考。
那么为什么是语法
const shadow = this.attachShadow({mode: 'open'});
在示例中如此常用,简单说明时:
this.attachShadow({mode: 'open'});
就足够了,因为...任何时候需要引用ShadowRoot,该引用实际上是:
this.shadowRoot
为什么 WebComponent 的 ShadowRoot 需要 另一个 超出 this.shadowRoot 的任意引用?
我是否遗漏了一些重要的东西...或者我可以安全地在我自己的WebComponents 中省略这些额外的引用吗?
【问题讨论】:
-
我突然想到,如果可以将单个
CustomElement赋予多个ShadowRoots,那么像const shadowroot1 = this.attachShadow({mode: 'open'});这样的引用会有意义。似乎在某一时刻(很久以前)这是可能的,尽管the idea of multipleShadowRootswas ditched in 2015,早在 WebComponents v1 在 2018 年底实现主流浏览器采用之前。后来,在 2019 年,@ 987654324@,但几乎没有得到浏览器供应商的支持。 -
所以,除非我错过了什么,否则在 2021 年
CustomElement只能有 一个ShadowRoot。您可以选择给这个ShadowRoot一个参考名称,如果您这样做,该参考名称可以是您想要的任何名称。 但是你给它取什么名字并不重要,因为你选择的任何东西都只会是this.shadowRoot的别名。所以你不妨使用this.shadowRoot。
标签: web-component shadow-dom custom-element native-web-component