如何获取加载Angular LazyModule文件的进度?

如何获取加载Angular LazyModule文件的进度?,angular,angular-router,Angular,Angular Router,我想弄清楚我怎样才能在加载角度懒散加载的模块时获得进度指示 我可以改变预加载策略,但是是否有一个钩子可以订阅加载进度 export class MyPreloadingStrategy implements PreloadingStrategy { preload(route: Route, load: Function): Observable<any> { return of(true).pipe(flatMap(_ => load()));

我想弄清楚我怎样才能在加载角度懒散加载的模块时获得进度指示

我可以改变预加载策略,但是是否有一个钩子可以订阅加载进度

export class MyPreloadingStrategy implements PreloadingStrategy {
    preload(route: Route, load: Function): Observable<any> {
        return of(true).pipe(flatMap(_ => load()));
    }
}
导出类MyPrelodingStrategy实现PrelodingStrategy{
预加载(路径:路径,负载:功能):可观察{
返回(true).pipe(flatMap(=>load());
}
}

是否可以订阅
load
至少知道它是何时加载的?

您可以订阅
Router.events

RouteConfigLoadStart

路由器延迟加载路由配置之前触发的事件

RouteConfigLoaded

延迟加载路由后触发的事件

假设您有以下惰性路径:

{
  path: 'lazy', loadChildren: () => import('./lazy/lazy.module').then(m => m.LazyModule)
}
下面是如何连接到该模块的加载过程:

import { RouteConfigLoadEnd, RouteConfigLoadStart, Router } from '@angular/router';

...
constructor(private router: Router) {
  router.events.subscribe((
    event => {
      if (event instanceof RouteConfigLoadStart && event.route.path === 'lazy') {
        console.log('START');
      }
      if (event instanceof RouteConfigLoadEnd && event.route.path === 'lazy') {
        console.log('FINISH');
      }
    }));
}

通常,对于大多数情况,加载模块不应该花费那么长的时间。等待它的是检索该模块中显示的数据的服务调用。您是否将您的数据服务作为您订阅的可观察对象单独构建?如果是这样的话,也许你的加载器可以和这些联系起来。“不用花那么长时间来加载”-没错,我这样做更多是为了教育目的谢谢你的反馈。也许你知道我如何跟踪文件加载进度?类似于覆盖/扩展
NgModuleFactoryLoader
只有将loadChildren用作字符串时,覆盖NgModuleFactoryLoader才会有帮助。所有延迟加载模块都是RouterConfigLoader的控制器,它包括onLoadStartListener和onLoadEndListener,实际上,在我的示例中,这些都是我订阅的钩子。即使您将使用
loadChildren:'stringPathToModule'
并覆盖NgModuleFactoryLoader,您最终也会得到完全相同的钩子:1)当它启动时,2)当它完成时,hood Web包会执行以下
var script=document.createElement('script');script.onload=onScriptComplete;document.head.appendChild(脚本)