angular - Angular - 我如何知道哪个操作调用了 ngAfterViewChecked()?

考虑一个 table,它的行是动态构建的——即 HTML 元素包含一个 *ngIf 指令。

在不同的场合,我想将选定的 table 行滚动到视图中。而且因为这些是不同的场合,我需要完全构建 table 才能使其正常工作,所以我在 ngAfterViewChecked() 中执行此滚动到视图操作。

到目前为止,这工作得很好。现在,我在另一个组件上添加了一个 document.click 侦听器,而不是 table,而是一个与 table 在同一页面上的组件:

@HostListener('document:click')
  documentClick(): void {
    // do something
  }

这似乎使我的滚动视图混乱:例如,当单击一个按钮时,通常将选定的 table 滚动到视图中, ngAfterViewChecked() 执行两次,但是第二次,内部的错误 if-block这个函数被执行。

我想知道,我是否可以以某种方式检查 document.click 事件是否调用了 ngAfterViewChecked(),以便我可以在附加的 if 块中处理此事件?

我也愿意接受其他建议。

回答1

如果您想在页面初始化时滚动到 table 行,您可以在 AfterViewInit 生命周期挂钩中进行滚动。

由于生命周期挂钩链,每次更改检测都会调用 ngAfterViewChecked()。

https://angular.io/guide/lifecycle-hooks

此外,您可以执行滚动监听单击或其他选择 table 行的事件。

相似文章

随机推荐

最新文章