Angular 7滚动事件不会触发

时间:2018-11-07 11:18:07

标签: angular angular-material angular7

用于在MatDialog组件的Angular应用中实现间谍导航栏。 我实现了一个指令来监视使用

的滚动事件
@HostListener('window:scroll', ['$event'])

我也尝试使用'scroll'作为事件名称。但是该事件似乎并未触发。我尝试了几种方法,例如G。通过直接在对话框组件中使用HostListener,使用JavaScript window.onscroll()函数和rxjs fromEvent()函数,但没有成功。

尝试其他CSS事件(例如window:click)工作正常。 我还在“普通”组件中尝试过该组件,该组件未显示为对话框,但该事件也未在其中触发。

这种行为可能是什么原因?

3 个答案:

答案 0 :(得分:3)

此行为的原因是角材料阻止了滚动事件。

我这样解决了:

  ngAfterViewInit(): void {

    const content = document.querySelector('.mat-dialog-container');
    const scroll$ = fromEvent(content, 'scroll').pipe(map(() => content));

    scroll$.subscribe(element => {
      // do whatever
    });
  }

答案 1 :(得分:3)

这里是替代solution,效果很好。

简而言之:

ngOnInit() {
    // Add an event listener to window
    // Window can be defined in the pollyfiles.ts as: 
    // if (window) {
    //    (window as any).global = window;
    // }
    window.addEventListener('scroll', this.scroll, true); //third parameter
}

ngOnDestroy() {
    window.removeEventListener('scroll', this.scroll, true);
}

scroll = (event: any): void => {
  // Here scroll is a variable holding the anonymous function 
  // this allows scroll to be assigned to the event during onInit
  // and removed onDestroy
  // To see what changed:
  const number = event.srcElement.scrollTop;
  console.log(event);
  console.log('I am scrolling ' + number);
};

答案 2 :(得分:0)

尝试此操作...无需对html进行任何操作。

import { Component, OnInit, HostListener } from '@angular/core';

@HostListener('window:scroll', ['$event']) getScrollHeight(event) {
   console.log(window.pageYOffset, event);
}