簡體   English   中英

如何使 HostListener 滾動工作?

[英]How to make HostListener for scroll work?

我正在嘗試添加一個window:scroll偵聽器但是滾動時什么也沒有發生

到目前為止我嘗試過的:

在組件裝飾器中使用host

@Component({
  ...
  host: {
    'window:scroll' : 'onWindowScroll($event)'
  },
  ...
)
export class PageWrapperComponent implements OnInit {
  ...
  public onWindowScroll(event: Event): void {
    console.log('scrolled');
  }
  ...
}

在組件裝飾器中使用HostListener

export class PageWrapperComponent implements OnInit {
  ...
  @HostListener('window:scroll', ['$event'])
  public onWindowScroll(event: Event): void {
    console.log('scrolled');
  }
  ...
}

我也嘗試在屬性指令中使用它,但它也不起作用

兩者都不會觸發console log 我在 SO 中搜索了類似的問題,但即使我的代碼基本相同,它仍然不起作用。

在組件裝飾器中使用主機

它應該是:

'(window:scroll)' : 'onWindowScroll($event)'

Plunker 示例

在組件裝飾器中使用 HostListener您的語法看起來正確

@HostListener('window:scroll', ['$event'])
public onWindowScroll(event: Event): void {
  console.log('scrolled');
}

Plunker 示例

您還可以確保您的組件具有滾動功能。 在我的例子中,我通過以下方式模仿滾動:

styles: [`
    :host {
      display: block;
      height: 2000px;
    }
`]

我和我的團隊最近遇到了這個問題。 我們的解決方案是使用 angular 的 Renderer 為 elementRefs parentNode 上的 'scroll' 事件設置一個監聽器。

`constructor(
  private _renderer: Renderer,
  private _elementRef: ElementRef
) {
  this._renderer.listen(this._elementRef.nativeElement.parentNode, 
   'scroll', (event) => {
      // do stuff with the event
  });
}`

(代表問題作者發表)

我能夠找出 HostListener 不工作的原因,我使用的是 angular/material 組件庫,我用 100vh 覆蓋了 md-sidenav-layout 高度,但它不喜歡那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM