2 回答
TA贡献1820条经验 获得超9个赞
这是一个已知问题:
connectedCallback
不不意味着你的元素或不完全解析。
自定义元素缺少parsedCallback
方法
查看所有答案:
自定义 HTMLElement connectedcallback-of-a-custom- htmlelement 的 connectedCallback() 中的 textContent 为空
TL; 博士;
接受的方法是延迟渲染方法:
connectedCallback(){ setTimeout(this.render); }
TA贡献1784条经验 获得超7个赞
connectedCallback当它尚未被解析时,似乎无法访问与其自身相关的其他元素。如果您认为自定义元素必须能够存在于 DOM 中的任何位置而不依赖于另一个元素,那么这种类型是有意义的。因此,如果没有要选择的父元素,则该元素可能无法正常工作。
一种方法是修改render方法以接受一个参数,该参数将tracklist动态设置属性到自定义元素。然后my-element从 DOM 中选择元素并查找section.
然后在自定义元素准备好时使用该customElements.whenDefined方法将section和连接my-element在一起。此方法会返回一个 Promise,该 Promise 会在定义自定义元素时解析并让您能够执行回调。
请参阅下面的示例:
// Do something whenever the element is ready.
window.addEventListener('load', function() {
// Wait for the document to load so the DOM has been parsed.
window.customElements.whenDefined('my-element').then(() => {
const myElement = document.querySelector('my-element');
// Only do something if the element exists on the page.
if (myElement !== null) {
const tracklist = myElement.closest('section');
myElement.render(tracklist);
console.log(myElement.tracklist);
}
});
});
// Create element.
class myElement extends HTMLElement{
constructor() {
super();
this.tracklist = null;
}
render(tracklist){
this.tracklist = tracklist;
// following code requires this.tracklist!
// ...
}
}
// Define element.
window.customElements.define('my-element', myElement);
<section>
<my-element></my-element>
</section>
如果我不清楚或您有任何疑问,请告诉我。
添加回答
举报