网站搜索

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 代码保持在同一个函数中,并且不需要标志属性。然而,我对其可靠性感到不确定,而且似乎找不到太多答案或文档来支持这一点。

有人能给我一些建议吗?