• [Angular2 Router] Preload lzay loading modules


    From router v3.1.0, we have preloading system with router.

    PreloadAllModules

    After the init module loaded, router will preloading the rest module at the background. 

    const indexRoute = {path: '', redirectTo: 'home', pathMatch: 'full'};
    const fallbackRoute = {path: '**', component: NotFoundComponent};
    const routes = [
      {path: 'legacy-url', redirectTo: '/home', pathMatch: 'prefix'},
      {path: 'home', loadChildren: 'app/home/home.module', name: 'Home'},
      {path: 'heros', loadChildren: 'app/heros/heros.module', name: 'Heros'},
      {path: 'contact', loadChildren: 'app/contact/contact.module', name: 'Contact'},
      indexRoute,
      fallbackRoute,
    ];
    
    export default RouterModule.forRoot(routes, {
      useHash: true,
      preloadingStrategy: PreloadAllModules
    });

    Custom Preload Strategy:

    const indexRoute = {path: '', redirectTo: 'home', pathMatch: 'full'};
    const fallbackRoute = {path: '**', component: NotFoundComponent};
    const routes = [
      {path: 'legacy-url', redirectTo: '/home', pathMatch: 'prefix'},
      {path: 'home', loadChildren: 'app/home/home.module', name: 'Home'},
      {path: 'heros', loadChildren: 'app/heros/heros.module', name: 'Heros', data: {preload: true}},
      {path: 'contact', loadChildren: 'app/contact/contact.module', name: 'Contact', data: {preload: true}},
      {path: 'message', loadChildren: 'app/message/message.module', name: 'Message'},
      indexRoute,
      fallbackRoute,
    ];
    
    export default RouterModule.forRoot(routes, {
      useHash: true,
      preloadingStrategy: PreloadSelectedModuledsList
      //preloadingStrategy: PreloadAllModules
    });

    In the router config, we use :

    data: {preload: true}

    To tell which modue should be preloaded.

    Then provide a custom loading strategy:

    import {PreloadingStrategy, Route} from "@angular/router";
    import {Observable} from "rxjs";
    export class PreloadSelectedModuledsList implements PreloadingStrategy {
      preload(route: Route, load: Function): Observable<any> {
        return route.data.preload ? load() : Observable.of(null);
      }
    
    }

    Last step, in the app.module.ts, inject the provider to the providers list:

      providers: [
        {provide: APP_BASE_HREF, useValue: '/'},
        {
          provide: API_URL,
          useValue: `https://en.wikipedia.org/w/api.php?callback=JSONP_CALLBACK`
        },
        {
          provide: STARWARS_BASE_URL,
          useValue: `https://starwars-json-server-ewtdxbyfdz.now.sh`
        },
        PreloadSelectedModuledsList
      ],

    Github

  • 相关阅读:
    python2中的SSL:CERTIFICATE_VERIFY_FAILED错误的解决办法
    head first 设计模式第一章笔记
    pycharm设置python脚本模板
    zip的压缩和解压命令
    js数组和集合互转
    查看Oracle的连接数
    转 小辉_Ray DOM性能小记
    学习总结之javaScript document对象详解
    MySQL 表的一些操作
    MySQL 的一些操作
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5958150.html
Copyright © 2020-2023  润新知