我正在Angular 2中编写一个指令,它使用元数据部分中的host属性附加一个带有全局事件的事件处理程序,例如window的滚动事件。代码如下:
<html>
...
<body>
<div listen-to-scroll>
Some big fat content is here
</div>
</body>
<html>
.ts文件看起来像listen-to-scroll
指令,如下所示:
@Directive({
selector: '[listen-to-scroll]',
host: {
(window:scroll): '_handleScrollEvent($event)'
}
})
export class ListenToScrollDirective {
_handleScrollEvent(event: Event) {
console.log('event occurred');
}
}
我发现指令注册的滚动处理程序始终处于活动状态。那么如何从滚动事件的监听中取消注册呢?我希望通过主机对象注册事件就像干净一样。
答案 0 :(得分:0)
我认为如果您手动处理它,您将能够删除该侦听器。请尝试以下方法:
final MimeTypeMap mime = MimeTypeMap.getSingleton();
String tmptype = mime.getMimeTypeFromExtension("vcf");
上面的实现将在没有全局@Directive({
selector: '[listen-to-scroll]'
})
export class ListenToScrollDirective implements OnInit, OnDestroy {
ngOnInit() {
window.addEventListener('scroll', this.handleScrollEvent);
}
ngOnDestroy() {
window.removeEventListener('scroll', this.handleScrollEvent);
}
private handleScrollEvent(event: Event) {
console.log('event occurred');
}
}
对象的环境中中断,因此您必须处理它。我相信当您在window
属性中附加事件侦听器时,Angular会为您处理。