考虑一个 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 行的事件。