如何在延迟加载期间显示加载组件

时间:2019-05-21 08:40:33

标签: javascript angular typescript lazy-loading code-splitting

我没有在我的角度项目中延迟加载配置。 做到了,但是有一个问题。

由于我的延迟加载组件太大(700kb), 从Web服务器加载组件的时间太长(0.5s)

我必须在延迟加载时显示加载组件。

但是我在角度路由器模块中找不到加载选项。

我尝试找到有关延迟负载的角形路由器类型定义。

const routes: Routes = [
  { path: '', component: RandingPageComponent },
  {
    path: 'teams/:name',
    // Loading component cannot here
    loadChildren: 'src/app/domain/domain.module#DomainModule'
  },

  { path: '**', component: NotfoundComponent }
];

2 个答案:

答案 0 :(得分:2)

Router.navigate方法返回一个承诺。因此,您可以在其上调用then()。因此,您可以做的是保留一个名为 showLoadingComponent 的变量,默认情况下该变量为 false ,并且在导航时执行以下操作:

this.showLoadingComponent = true;
this.router.navigate(['/newComponent']).then(value => {
      this.showLoadingComponent = false;
});

在您的html中,

<div *ngIf="!showLoadingComponent">
    // default content
</div>
<appLoadingComponent *ngIf="showLoadingComponent"></appLoadingComponent>

这将在您单击以导航至延迟加载组件直到延迟加载组件被加载后显示您的加载组件。

答案 1 :(得分:2)

尝试这个(app.component.ts)

import { Component } from "@angular/core";
import { Router, NavigationStart, NavigationEnd, Event, NavigationCancel, 
NavigationError } from "@angular/router";

@Component({
  selector: "app-root",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.scss"]
})
export class AppComponent {
  public showLoadingIndicator: boolean = true;
  constructor(private _router: Router) {
    this._router.events.subscribe((routerEvent: Event) => {
      if (routerEvent instanceof NavigationStart) {
        this.showLoadingIndicator = true;
      }

      if (routerEvent instanceof NavigationEnd ||
        routerEvent instanceof NavigationCancel ||
        routerEvent instanceof NavigationError) {
        this.showLoadingIndicator = false;
      }
    });
  }
}

在html(app.component.ts)中

<div *ngIf="showLoadingIndicator" class="loading">Loading&#8230;</div>
<router-outlet></router-outlet>