如何分离Angular 2全球事件

时间:2017-06-01 05:09:20

标签: angular directive

我正在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');
     }
 }

我发现指令注册的滚动处理程序始终处于活动状态。那么如何从滚动事件的监听中取消注册呢?我希望通过主机对象注册事件就像干净一样。

1 个答案:

答案 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会为您处理。