typescript - Angular - 如何在渲染后执行代码
我需要一些帮助来决定在 Angular 10 中组件渲染后如何执行代码。
我发现了两种方法来做这件事,但每种方法都有一些顾虑或不安,我想知道应该选择哪一种,或者是否有其他选择:
方法 1:AfterViewChecked
class UserComponent implements OnInit, AfterViewChecked {
...
users = [];
doRenderCallback = false;
ngAfterViewChecked(): void {
if (this.doRenderCallback) {
// Perform JQuery
this.doRenderCallback = false;
}
}
private addUser(user): void {
this.users.push(user);
this.doRenderCallback = true;
}
}
https://angular.io/guide/lifecycle-hooks
每当添加新用户时,我会设置一个布尔标志,然后在 ngAfterViewChecked 中检查该标志,并在新生成的 HTML 元素上执行一些给定的 jQuery 操作。
然而,这假设 jQuery 操作是在最后添加的用户上执行的,所以如果 addUser 被同时调用多次(比如从服务器加载现有数据),那么它就不起作用。
方法 2:setTimeout
class UserComponent implements OnInit {
...
users = [];
private addUser(user): void {
this.users.push(user);
setTimeout(() => {
// Perform JQuery
});
}
}
在更新 users 属性后直接使用 setTimeout 会更干净,因为它将 jQuery 代码保持在同一个函数中,并且不需要标志属性。然而,我对其可靠性感到不确定,而且似乎找不到太多答案或文档来支持这一点。
有人能给我一些建议吗?