Angular 被动事件监听器

Posted

技术标签:

【中文标题】Angular 被动事件监听器【英文标题】:Angular Passive Event Listeners 【发布时间】:2020-03-27 04:05:52 【问题描述】:

关于这个话题how to make an event listener passive in Angular,互联网上空无一人,真是令人震惊。

我有一个下拉菜单,在滚动时会在 Chrome 中引发错误: [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive....

Google 抛出此错误的动机和问题本身对我来说非常清楚,并且我知道解决方案。我需要在我的 Angular 代码中进行类似的工作:document.addEventListener('wheel', (e) => e.preventDefault() , passive: false ); 但似乎解决方案比我想象的更难实现。 Angular 无法将事件侦听器设置为 passive: false,而我在上面粘贴的 vanilla JS 根本不起作用。

有没有人遇到过类似的问题/解决方案? 也许有解决方法? 任何相关信息都可能很有价值,谢谢。

【问题讨论】:

嗨 SharisM,你能试试使​​用https://angular.io/api/core/HostListener 吗?您可能会选择在那里使用或优化行为。 你好@mikegross,我很快就会试一试,我们会看看结果如何。谢谢。 @mikegross,试过了,但也没有用。也许您可以具体说明您的想法?谢谢 【参考方案1】:

如https://angular.io/guide/user-input中指定:

(window as any)['__zone_symbol__PASSIVE_EVENTS'] = ['scroll'];

可以在 polyfills 中添加,这将使滚动事件的事件监听器被动

【讨论】:

您链接的页面已被标记为归档。这是一个更好的链接:angular.io/guide/event-binding#binding-to-passive-events.

以上是关于Angular 被动事件监听器的主要内容,如果未能解决你的问题,请参考以下文章

在 onWheel 事件中使用 event.preventDefault 时,如何规避 reactjs 中的“被动事件监听器”

[Violation] 向 Angular 4 项目中的滚动阻止“touchstart”事件添加非被动事件侦听器是啥意思?

chrome 监听touch类事件报错:无法被动侦听事件preventDefault

无法阻止被动事件监听器jQuery Mobile中的默认

Angular 2 路由器事件监听器

如何在Angular项目里监听页面关闭、跳转事件?