2017-10-17 120 views
-1

我在Angular组件的模板中有一个div。在div上,我试图获得div的滚动位置。滚动事件不在元素div上触发

<div class="data-input" (scroll)="onScroll($event)">Accepted Qty....</div> 

html元素看起来像这样。

在TS文件

我有一个函数

onScroll(event) { 
    console.log(event); 
} 

,但此功能未击中。

我已经尝试过

@HostListener('scroll', ['$event']) 
onScroll(event) { ...} 

但这个工程时,页面滚动。我想在HTML元素(div)滚动时触发滚动事件。

+0

可能是https://stackoverflow.com/questions/44516017/how-to-handle-window-scroll-event-in-的副本angular-4 – izulito

+0

但我不想让窗口滚动。我正在尝试获取元素滚动。 –

+0

您正在使用哪种浏览器?你在其他浏览器中看到了这个问题吗? – ConnorsFan

回答

0

您可以尝试通过ElementRefRenderer。我起草了独立滚动组件,为您展示的概念:

import {Component, OnInit, OnDestroy} from '@angular/core'; 
import {ElementRef, Renderer2} from '@angular/core'; 

@Component({ 
    selector: 'my-scroll', 
    template: '<div>Accepted Qty....</div>' 
}) 

export class MyScrollComponent implements OnInit, OnDestroy { 

    onScrollListener: Function; 

    constructor(private elementRef: ElementRef, private renderer: Renderer2) { 
    } 

    ngOnInit() { 
    this.onScrollListener = 
     this.renderer.listen(this.elementRef.nativeElement, 'scroll', this.onScroll); 
    } 

    ngOnDestroy() { 
    this.onScrollListener(); 
    } 

    onScroll(event) { 
    console.log(event); 
    } 
} 
+0

我的情况下div元素是在其他元素内。 –

+0

我认为没有问题以'你好世界'的方式使用它。你也可以从MyScroll组件创建一个包装器来提供独立的内容,比如:' world!'。第二种方法需要一些额外的代码。你也可以构建一个指令......这只是一个概念,无论如何,在我的项目中,我倾向于使用'Renderer.lesten'而不是'HostListener'。 – dhilt

相关问题