用于在MatDialog组件的Angular应用中实现间谍导航栏。 我实现了一个指令来监视使用
的滚动事件@HostListener('window:scroll', ['$event'])
我也尝试使用'scroll'
作为事件名称。但是该事件似乎并未触发。我尝试了几种方法,例如G。通过直接在对话框组件中使用HostListener,使用JavaScript window.onscroll()
函数和rxjs fromEvent()
函数,但没有成功。
尝试其他CSS事件(例如window:click
)工作正常。
我还在“普通”组件中尝试过该组件,该组件未显示为对话框,但该事件也未在其中触发。
这种行为可能是什么原因?
答案 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);
}