在设计自定义元素时,我了解模板在性能方面的优势,但对于仅在一个元素中使用的结构,我很难理解在constructor()
元素类定义本身中构建 html 的缺点。
换句话说,做这样的事情有什么缺点:
const myTemplate = document.createElement("template");
myTemplate.innerHTML = `<p>my text</p>`;
customElements.define( 'my-elem', class extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: "open" });
this.shadowRoot.appendChild(myTemplate.content.cloneNode(true));
}
})
对此:
customElements.define( 'my-elem', class extends HTMLElement {
constructor() {
super();
let myP = document.createElement("p");
let myText = document.createTextNode("my text");
myP.appendChild(myText);
this.attachShadow({ mode: "open" });
this.shadowRoot.appendChild(myP);
}
})
...当后一个选项 (a) 保留 using 的优点createElement
和 (b) 有助于防止通过在元素定义范围之外定义模板而引入的潜在封装问题时?
我也知道我可以使用createElement
而不是innerHTML
在上面的示例中构建模板,但这有可能引入更多在元素定义范围之外定义的变量。