- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个指令的以下实现。在这种情况下如何移除 EventListener:
import { Directive, ElementRef, OnDestroy } from "@angular/core";
@Directive({
selector: "[Enter]"
})
export class Enter implements OnDestroy{
constructor(el: ElementRef) {
let enter = function(event){
if(event.keyCode === 13){
el.nativeElement.click();
}
}
document.addEventListener('keyup', enter , false);
}
ngOnDestroy(){
document.removeEventListener('keyup', enter, false); //this line doesn't work because I can't access enter variable here!
}
}
我知道我可以在这里简单地使用一个全局变量并可以访问它。但是我不想将实例的状态存储在全局变量中。
最佳答案
我会利用 @HostListener
装饰器来做到这一点:
@Directive({
selector: "[Enter]"
})
export class Enter {
@HostListener('document:keyup', ['$event'])
enter(event) {
if (event.keyCode !== 13) return;
this.el.nativeElement.click();
}
constructor(private el: ElementRef) { }
}
处理程序将在 ngOnDestroy
中自动删除。
其他解决方案参见:
关于angular - 在 ngOnDestroy 中删除 EventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39755007/
我正在尝试理解和试验 Angular 生命周期 Hook 。 关于ngOnDestroy,在官方文档中是这样写的: A lifecycle hook that is called when a dir
我有一个在 Material 选项卡中创建的子表单组件: {{selectedEntity.resource.name}} 我正在使用 ngOnDes
当我第一次加载页面时,在某些页面上,它在 ngOnDestroy 中显示取消订阅错误,因为我正在取消订阅。 我不确定为什么在组件的初始化时调用 ngOnDestroy。 这是我第一次加载页面时看到的错
在我们的应用程序中,我们有一些组件继承自 BaseComponent。 . 基础组件实现 OnDestroy接口(interface)并发出 Subject 来通知 child 取消订阅最终打开的流。
所以我正在努力提高我的 Angular 技能,我目前正在一个论坛上工作。 我想向用户显示当前有多少用户在线。当他们进入网站的论坛部分时,我更新我的数据库以将一名成员添加到计数中,当他们离开时,它从同一
我有一个 Angular2 应用,其路由如下: { path: '', component: ContentComponent, children: [ { path:
是否可以在 ngOnDestroy 上发出自定义事件?我试过了,但它似乎不起作用...我基本上需要知道何时从 UI 中删除指令。 @Output() rowInit = new EventEmitte
HTML............ Upload TS文件............ export c
我想在用户点击浏览器后退按钮时打开一个弹出模式。它不应将用户重定向到上一页,但应打开一个弹出窗口并等待用户操作。 ngOnDestroy(){ this.finishModal.show();
无法在 ngOnDestroy Angular 6 中删除 fullscreenchange 事件监听器 我尝试在 ngOnDestroy 中调用 .removeEventListener() ,但它
我在手机上发现了一个问题。请注意,在开发人员工具中完成的所有操作、调整大小、节流;在我的桌面上一切正常。这是我的问题: 一:手机刷新网页的时候。我的聊天系统中的用户数没有刷新。这是我在 Angular
大家早上好 我开发了一个小的 angular2-client-app 来获取路由。路由是这样创建的: app.routes.ts import { provideRouter, RouterConfi
这个问题在这里已经有了答案: How to cancel a subscription in Angular2 (9 个回答) 关闭 6 年前。 在我的应用程序中,我有一些组件通过 EventSer
我想弄清楚 Angular 2 中的 ngOnDestroy 是在刷新时运行还是在有人离开页面时运行? 最佳答案 刷新或离开当前页面时(路由除外),ngOnDestroy 将不会被调用。该应用程序只会
HelloComponent 获取一个 SampleService 实例,定义一个服务提供者。当HelloCompoment被销毁时,我不明白为什么SampleService会存活。 如果 Hello
如何在应用程序级别而不是组件级别利用 ngOnDestroy? 我想在用户关闭我的应用程序时执行以下代码。 ngOnDestroy(): void { localStorage.removeI
我有一个对话框打开并包含一个组件...在组件中我进行订阅。关闭时我想取消订阅.. private deviceObserver: Observable = this.breakpointObserve
如何在应用程序级别而不是组件级别利用 ngOnDestroy? 我想在用户关闭我的应用程序时执行以下代码。 ngOnDestroy(): void { localStorage.removeI
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我有一个对话框打开并包含一个组件...在组件中我进行订阅。关闭时我想取消订阅.. private deviceObserver: Observable = this.breakpointObserve
我是一名优秀的程序员,十分优秀!