方法每 10 秒触发一次,并在 app.component.html 文件中重复 运行

Method being triggered every 10 seconds and run repeatedly in app.component.html file

我有一个 Angular 9 应用程序(最近从 7 升级,但在 7 中仍然有同样的问题)并且在我的 app.component.html 文件中有下面的代码。 页面加载正确,一切看起来都不错。 但是方法

getSideBarState() // returns a boolean

在 'toggled' 和 'show' 中,当我第一次启动调试器时,ngClass 被触发并且 运行 至少 10 次以上。然后在最后一个 运行s 之后,它等待大约 10 秒,然后再次触发 ~10 秒和 运行。这一直在不断地被触发和 运行.

谁能告诉我为什么,以及如何阻止它被触发和 运行 这么多次?我只希望它在应用首次加载时 运行 一次。

<div class="page-wrapper" [ngClass]="{'toggled' : getSideBarState()}" (window:resize)="onResize()">
  <app-sidebar></app-sidebar>
  <main class="page-content">
    <div class="">
      <app-nav-bar></app-nav-bar>
      <router-outlet (activate)="onActivate($event)"></router-outlet>
    </div>
    <div class="overlay" (click)="toggleSidebar()" [ngClass]="{'show' : !getSideBarState()}"></div>
  </main>
</div>

这是按照 Angular 的设计工作的。

getSideBarState 每次 Angular 应用程序中的变更检测 运行 都会被调用,几乎每个生命周期挂钩都会被调用,还有更多次(我不知道moment),因为您在模板中使用函数(return 模板中的某些内容)而不是简单的变量绑定。

How you avoid this?

为了避免在 ngOnInit 或其他合适的生命周期钩子中调用函数 getSideBarState 并将 return 值分配给一个变量,然后绑定到模板中的该变量, 这样就不会 运行 多次了。

例如-

ngOnInit() {
    getSideBarState();
}
getSideBarState() {
    ... Some calculations (here `classState` is variable)
    classState = true/false;    // return value
}

<div class="page-wrapper" [ngClass]="{'toggled' : classState}" (window:resize)="onResize()">
  <app-sidebar></app-sidebar>
  <main class="page-content">
    <div class="">
      <app-nav-bar></app-nav-bar>
      <router-outlet (activate)="onActivate($event)"></router-outlet>
    </div>
    <div class="overlay" (click)="toggleSidebar()" [ngClass]="{'show' :!classState}"></div>
  </main>
</div>

希望这个回答对您有所帮助。