【问题标题】:Angular - How to show waiting indicator while app is loading using APP_INITIALIZERAngular - 如何在使用 APP_INITIALIZER 加载应用程序时显示等待指示器
【发布时间】:2022-04-04 20:37:54
【问题描述】:

如何在 Angular 应用程序执行 app_initializer 代码时显示等待指示器。

到目前为止,我可以在加载应用程序之前显示等待指示器。但是在该页面保持空白直到 app_initializer 代码完成之后。所以我想显示某种等待指示器。

<app-root>Loading....</app-root>

也试过了

<app-root></app-root>
<div>Loading...</div>

当 app_initializer 正在执行时,这些选项都不起作用......在这段时间里,我正在调用 web api 来获取一些启动数据。

【问题讨论】:

标签: angular


【解决方案1】:

如果我正确理解您想要实现的目标,您应该检查 app.component 是否已完成 APP_INITIALIZER。 ApplicationInitStatus 公开 APP_INITIALIZER 的状态,您可以使用 donePromise 进行检查。

所以我会在 app.component.ts 中获得 Injection Token:

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: []
})
export class AppComponent implements AfterViewInit, OnInit {

  constructor(
    @Inject(APP_INITIALIZER) public appInit: ApplicationInitStatus
  ) { ... }

  ngOnInit () {...}
}

并在 app.component.html 中检查 APP_INITIALIZER 是否使用 donePromise 和异步管道完成:

<ng-container *ngIf="!(appInit.donePromise | async)"> Loading... </ng-container>

【讨论】:

  • 感谢 Marack 的回复,我应用了此代码并进行了检查,但它仍然没有解决我的问题,因为 appCoponent 仅在 APP_INITIALIZER 代码完成后才被初始化。为了检查这一点,我特别在 app_initializer 代码中添加了 10 秒的时间延迟,发现在 10 秒过去后出现“正在加载...”消息。
  • 我试过了,但我认为他犯了一个错误,而不是添加上面包含 Loading... 文本的 ng-container,你必须将它添加到 index.html 文件中,确切地说在 组件内。它应该可以正常工作。
【解决方案2】:

以下对我有用:

<style>
    .loader {
    margin: 50px auto 0;
    border: 16px solid #f3f3f3;
    border-top: 16px solid #3498db;
    border-radius: 50%;
    width: 120px;
    height: 120px;
    animation: spin 2s linear infinite;
    }
    @keyframes spin {
    0% {
    transform: rotate(0deg);
    }
    100% {
    transform: rotate(360deg);
    }
    }
</style>

<app-root>
      <div class="loader"></div>
</app-root>

【讨论】:

  • 试着解释你做了什么,而不是仅仅发布代码,让 OP 有机会了解你在做什么。这看起来很像他已经尝试过的一件事,有一些动画,而不仅仅是“加载...”
猜你喜欢
  • 2019-05-15
  • 2019-02-17
  • 1970-01-01
  • 2014-06-12
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
  • 2013-10-19
相关资源
最近更新 更多