【发布时间】:2023-02-02 22:27:05
【问题描述】:
我正在使用 Angular 14 和 PrimeNG 14。在我的模块中,我创建了默认路由,这取决于从解析器获取数据。我希望用户看到一个微调器,直到来自解析器的数据返回。我的路线是这样设置的......
const routes: Routes = [
{
path: '',
component: MyComponent,
resolve:{
myData:MyResolver
}
}
]
在 my-component.ts 文件中,我尝试像这样设置加载状态
loading = true;
constructor(private router: Router) {
console.log("subscribing ...");
this.router.events.subscribe(routerEvent => {
this.checkRouterEvent((routerEvent as RouterEvent));
});
}
checkRouterEvent(routerEvent: RouterEvent): void {
if (routerEvent instanceof NavigationStart) {
this.loading = true;
console.log("starting.");
}
if (routerEvent instanceof NavigationEnd ||
routerEvent instanceof NavigationCancel ||
routerEvent instanceof NavigationError) {
this.loading = false;
console.log("done.");
}
}
在 my-component.html 文件中,我有
<ng-template [ngIf]="loading">
<p-progressSpinner></p-progressSpinner>
</ng-template>
<ng-template [ngIf]="!loading">
...
</ng-template>
但是,我从来没有看到进度微调器。即使我关闭端点或断开与 Internet 的连接(我希望这会导致无限旋转),我的页面上也没有微调器。我该如何解决?
编辑:正在发生的事情的演示——https://stackblitz.com/edit/primeng-progressspinner-demo-t2taze?file=src/app/app.module.ts。
【问题讨论】:
-
但是,当您检查控制台输出时,
console.log("starting.");和console.log("done.");是否按预期工作并且 to console.logs 至少间隔几毫秒? -
我只是将
<p-progressSpinner></p-progressSpinner>放入您的 html(没有 NgIf)中,微调器是否正确显示? -
@kellermat,如果我在那里没有 *ngIf 语句,微调器 apperas(最终)。 “最终”意味着解析器完成时(似乎组件仅在解析器完成后才初始化并在模块内呈现)。我已经包含一个演示链接作为对我的问题的编辑。
-
我完全重写了我的答案并更新了我的 stackblitz-example(见下文)。我还包括了对已解析数据的实际获取(见下文)。
标签: angular spinner resolver angular14