Javascript Lit元素:DOM更新使用哪个事件?
如果某个lit元素的属性发生更改,则at上的文档描述了生命周期。但是,如果元素的DOM内容发生更改,我似乎找不到任何关于生命周期的文档 因此,假设我有一些嵌套的DOM结构,并且我最外层的元素应该显示基于DOM内容的内容。为了简单起见,下面的示例将只显示给定类型的子元素的数量 现在,在某个时刻,我的应用程序插入了一个新的嵌套元素(单击下面的Javascript Lit元素:DOM更新使用哪个事件?,javascript,web-component,lit-element,Javascript,Web Component,Lit Element,如果某个lit元素的属性发生更改,则at上的文档描述了生命周期。但是,如果元素的DOM内容发生更改,我似乎找不到任何关于生命周期的文档 因此,假设我有一些嵌套的DOM结构,并且我最外层的元素应该显示基于DOM内容的内容。为了简单起见,下面的示例将只显示给定类型的子元素的数量 现在,在某个时刻,我的应用程序插入了一个新的嵌套元素(单击下面的test按钮)。此时,我想更新显示的计数 从我的测试来看,在这种情况下,render()似乎不会再次调用,也不会被updated() 我需要听哪个事件,或者需要
test
按钮)。此时,我想更新显示的计数
从我的测试来看,在这种情况下,render()
似乎不会再次调用,也不会被updated()
我需要听哪个事件,或者需要实现哪个功能来识别这种变化?
我目前唯一的解决方法是在DOM更新后手动使用requestUpdate()
,但我认为此类更改应该由lit元素本身处理
document.querySelector('button'))
.addEventListener('单击',()=>{
const el=document.querySelector('my element');
el.insertAdjacentHTML('beforeed','newaddition');
})
我的元素,我的嵌套元素{
显示:块;
}
从导入{LitElement,html}https://unpkg.com/@聚合物/lit-element/lit-element.js?模块';
类MyElement扩展了LitElement{
构造函数(){
超级();
this.number=this.querySelectorAll('mynestedelement').length;
}
render(){
返回html`my嵌套元素的编号:${this.number}
`;
}
}
自定义元素。定义('my-element',MyElement);
类MyNestedElement扩展了LitElement{
render(){
返回html``;
}
}
定义('my-nested-element',MyNestedElement);
第一
第二
test
为了检测通过
元素从Light DOM插入的新元素,您可以侦听
元素或阴影DOM根本身上的事件
请参见下面的运行示例:
document.querySelector('button')。onclick=()=>
document.querySelector('my-element')。insertAdjacentHTML('beforeend','newaddition');
我的元素,
我的嵌套元素{
显示:块;
}
从导入{LitElement,html}https://unpkg.com/@聚合物/lit-element/lit-element.js?模块';
类MyElement扩展了LitElement{
第一次更新(){
var shadow=this.shadowRoot
var nb=shadow.querySelector('span#nb')
shadow.addEventListener('slotchange',()=>
nb.textContent=this.querySelectorAll('mynestedelement').length
)
}
render(){
返回html`我的嵌套元素的编号:
`;
}
}
自定义元素。定义('my-element',MyElement);
第一
第二
测试
您可以收听慢速更改event@Supersharp谢谢在处理了一些细节之后(似乎我需要将事件附加到shadowRoot
,而不是元素本身),这就成功了。如果你把它写进一个答案,我很乐意接受。