小编Jor*_*uis的帖子

何时调用自定义元素构造函数?(HTMLTemplateElement.content问题)

看看这个简单的例子 (不要理会这个,去编辑)

class MyElement extends HTMLElement {

  customProperty = "something";

  constructor() {
    super();

    console.log("My Element Constructor");
  }
}

customElements.define("my-element", MyElement);

document.body.innerHTML = "<my-element></my-element>";
var myElement = document.querySelector("my-element");
console.log(myElement); // 
console.log(myElement.customProperty); //
Run Code Online (Sandbox Code Playgroud)

输出:

<my-element>
undefined
My Element Constructor
Run Code Online (Sandbox Code Playgroud)

在主调用堆栈完成之前,不会调用自定义元素构造函数(但它是 HTMLElement 构造函数)。这是预期行为还是错误?

谢谢!

编辑

为了简化我的实际情况,我提出了前面的示例,但我现在认为它不适合说明我的问题(该示例确实可以正常工作)。感谢@connexo的回答,我能够隔离问题(这是一个具有许多依赖项的复杂项目)并将其转换为以下示例:

<my-element>
undefined
My Element Constructor
Run Code Online (Sandbox Code Playgroud)

由于某种原因,当模板元素的内容被添加到shadowRoot时,这些元素将不会被解析,直到shadowRoot被添加到DOM。但是当直接修改shadowRoot的innerHTML时,即使shadowRoot不属于DOM,也会解析该内容。

感谢您的时间。

javascript constructor web-component custom-element native-web-component

0
推荐指数
1
解决办法
1427
查看次数