聚合物、影子 dom、事件和冒泡

Posted

技术标签:

【中文标题】聚合物、影子 dom、事件和冒泡【英文标题】:polymer, shadow dom, events and bubbeling 【发布时间】:2018-08-27 20:23:17 【问题描述】:

我有一个使用 shadow dom (v1) 的聚合物自定义元素,该元素位于另一个聚合物自定义元素中,也包裹在 shadow dom 中..

在我的理解中,当最内部的元素引发事件时,最外部的元素(应用程序)应该能够监听这些事件。 这是不正确的吗?

我在应用组件内的评论组件内有一个评级组件。评级组件抛出一个事件:

this.dispatchEvent(new CustomEvent('custom-event'),  bubbles:true, composed:true );

但是,app-component 下面的代码永远不会被触发..

connectedCallback()  
  super.connectedCallback();
  this.addEventListener('custom-event', () =>  console.log('a'););

除非有人停止传播,否则我假设事件最终会从不同的阴影区域一直冒泡到窗口,我是否不正确?

感谢任何答案..

约翰。

【问题讨论】:

如果放在ready() 方法中会触发吗?我问的不是经验,而是查看 Shop 应用程序,其中shop-app 包括shop-cart,其中包括shop-cart-item。后者调度'set-cart-item',在shop-appready()中为其添加了事件监听器。 我有一个解释问题的设置:github.com/JohnGorter/polymerevent 【参考方案1】:

找到它,我将选项设置为 dispatchEvent 的参数,而不是将选项添加到 CustomEvent

所以而不是

this.dispatchEvent(new CustomEvent("event"),  options );

你必须这样做

this.dispatchEvent(new CustomEvent("event",  options ));

【讨论】:

以上是关于聚合物、影子 dom、事件和冒泡的主要内容,如果未能解决你的问题,请参考以下文章

在聚合物3中导入外部样式表

反射聚合物/网络组件接口

从 DOM 中删除并再次插入后如何更新聚合物元素绑定

影子 DOM 中的 React 组件时单击事件未触发

聚合物DOM-重复内容取决于接收的数据

聚合聚合根领域服务应用服务仓储”和“工作单元”领域事件集成事件