Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Lit元素:DOM更新使用哪个事件?_Javascript_Web Component_Lit Element - Fatal编程技术网

Javascript Lit元素:DOM更新使用哪个事件?

Javascript Lit元素:DOM更新使用哪个事件?,javascript,web-component,lit-element,Javascript,Web Component,Lit Element,如果某个lit元素的属性发生更改,则at上的文档描述了生命周期。但是,如果元素的DOM内容发生更改,我似乎找不到任何关于生命周期的文档 因此,假设我有一些嵌套的DOM结构,并且我最外层的元素应该显示基于DOM内容的内容。为了简单起见,下面的示例将只显示给定类型的子元素的数量 现在,在某个时刻,我的应用程序插入了一个新的嵌套元素(单击下面的test按钮)。此时,我想更新显示的计数 从我的测试来看,在这种情况下,render()似乎不会再次调用,也不会被updated() 我需要听哪个事件,或者需要

如果某个lit元素的属性发生更改,则at上的文档描述了生命周期。但是,如果元素的DOM内容发生更改,我似乎找不到任何关于生命周期的文档

因此,假设我有一些嵌套的DOM结构,并且我最外层的元素应该显示基于DOM内容的内容。为了简单起见,下面的示例将只显示给定类型的子元素的数量

现在,在某个时刻,我的应用程序插入了一个新的嵌套元素(单击下面的
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
,而不是元素本身),这就成功了。如果你把它写进一个答案,我很乐意接受。