【发布时间】:2020-01-11 02:54:20
【问题描述】:
问题
我的一个组件设置了HostListener 绑定:
@HostListener('window:resize', ['$event']) callback ($event) {
// D3Js tasks here …
}
目前,当调用监听器时,父组件重新评估其模板,就好像父组件确实响应了某个子组件的output。
但是侦听器执行的任务不需要父组件的任何更新。
我希望监听器可以在不通知父组件的情况下执行。
在 Angular在这种情况下的某处可以防止这种冒泡行为?
尝试
$event.stopPropagation() 和 $event.stopImmediatePropagation() 都没有帮助,可能是因为这种行为与 Angular 内部结构有关。
将 HostListener 声明留空(注释掉包含的指令)不会改变任何东西,我认为这表明 HostListener 声明是这里的罪魁祸首。
我目前的解决方案是在组件构造函数中直接从原生 DOM 事件(不依赖 Angular)中创建一个 observable:
this.onResizeSub = Observable
.fromEvent(window, 'resize', null, null)
.subscribe( () => {…});
);
注意事项:使用 Angular v4.4.2,到处更改检测 OnPush 策略。
【问题讨论】:
标签: angular angular-changedetection