【问题标题】:Angular2 dynamically attaching DOM eventsAngular2动态附加DOM事件
【发布时间】:2017-02-08 10:22:38
【问题描述】:

我正在为 Angular2 使用 Angular2 和 devextreme。我正在尝试从他们网站上的一个问题中添加一些功能,该问题要求将事件处理程序附加到 html 元素

    $('html').on('dxclick', function(event) {
        console.log('DxClick - Clicked');
    });

显然,在 angular2 中,这会令人不悦,所以我正在尝试弄清楚如何正确地做到这一点。我尝试了以下方法:

constructor(@Inject(EventManager) private eventManager: EventManager) {
    this.eventManager.addGlobalEventListener('html', 'dxclick', function(event: any) {
        console.log('DxClick Clicked');
    });
}

这只是导致“无法读取未定义的属性'addEventListener'”异常

public ngAfterViewInit() {
    let htmlElement: any = this.elementRef.nativeElement;
    while (htmlElement && htmlElement.localName !== 'html') {
        htmlElement = htmlElement.parentNode;
    }

    if (htmlElement) {
        this.eventManager.addEventListener(htmlElement, 'dxclick', function (event: any) {
            console.log('DxClick Clicked');
        });
    }
}

这段代码找到了html元素,addEventListener执行成功,但是回调函数从未执行。

是否可以重现 jQuery 代码,如果可以,我错过了什么。

【问题讨论】:

    标签: angular typescript dom-events


    【解决方案1】:

    您可以使用以下语法附加到组件中的全局事件,例如调整事件大小:

    @HostListener('window:resize')
    resizeWindow() {
        // window has been resized
    }
    

    【讨论】:

    • 这也会导致“无法读取未定义的属性'addEventListener'”异常。我认为 html 不是 HostListener 的有效目标
    猜你喜欢
    • 2016-07-29
    • 2018-12-05
    • 1970-01-01
    • 2012-01-31
    • 2023-03-22
    • 2016-04-23
    • 1970-01-01
    • 2016-03-19
    • 2023-03-25
    相关资源
    最近更新 更多