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

最新文章

  1. 手动使用sql*plus创建Oracle数据库
  2. 10月28日PHP基础知识测试题
  3. js实现div层缓慢收缩与展开的方法
  4. ion-scroll 滚动框
  5. [转载]javascript创建对象的几种方式
  6. NOR Flash擦写和原理分析 (二)
  7. Unity3D之Assetbundle
  8. [Android开发常见问题-14] Unexpected namespace prefix &quot;abc&quot; found for tag SomeThing
  9. php-app开发接口加密
  10. loadrunner常用函数总结
  11. .net解决js访问服务器端,跨域访问的问题
  12. 【转】一个小工具类,利用shareObject把数据缓存
  13. 我的three.js学习记录(一)
  14. Loadrunner 11 中Run-Time Setting详细参数说明
  15. PJSUA2开发文档--第三章 PJSUA2高级API
  16. js 数字随机滚动(数字递增) 每日凌晨回到原点,重新计算
  17. JavaScript中的原型链原理
  18. html 框架 內聯框架
  19. XML模块(二十四)
  20. ERP出库审核业务(四十四)

热门文章

  1. Android WebView页面加载优化
  2. Spring boot 解析jsp支持jsp热部署
  3. css笔记(二)——几种经常使用的模式
  4. Qt样式表之盒子模型(以QSS来讲解,而不是CSS)
  5. 火车票问题.以及x轴连续矩形,最大面积问题
  6. golang filepath.Walk遍历指定目录下的所有文件
  7. golang 函数传值
  8. Android: 分页浏览的利器 android View Pager
  9. docker构建一个简易镜像
  10. 洛谷 P2807 三角形计数