当前位置: 主页 > 国内 >
厨房

当前文章:http://x6o.bhcbz.cn/a/ff0a3_1277.html

发布时间:2017-10-17 03:12:46

热血江湖私服发布网  幸福空间  天龙八部私服发布网  热血传奇私服  新开传世私服  魔域sf  传奇私服网  天龙八部私服发布网  奇迹sf  传奇外传私服  

使用路由延迟加载 Angular 模块

使用路由延迟加载 Angular 模块

Angular 非常模块化,模块化的一个非常有用的特性就是模块作为延迟加载点。延迟加载意味着可以在后台加载一个模块和其包含的所有组件等资源。这样 Angular 就不需要在第一个界面从服务器下载所有的文件,直到您请求它,才下载相应的模块。这对提供性能和减少首屏的初始下载文件尺寸有巨大的帮助。而且它可以很容易设置。

这里将使用一个简单示例来演示这个特性是如何工作的。将应用拆分为多个不同的新闻资讯网模块,可以在需要的时候再进行延迟加载。

延迟加载的路由需要在根模块之外定义,所以,你需要将需要延迟加载的功能包含在功能模块中。

我们使用 Angular CLI 来创建一个演示项目:Demo.

ng new demo

然后,进入到 demo 文件夹中。安装必要的 package。

npm i

在安装之后,我们创建一个新的模块 shop。在 angular CLI 中,ng 是命令提示指令,g 表示generate,用来创建某类新 item。

创建新的名为 shop 的模块就是:

ng g module shop

这会导致在 Angular 项目的 src/app 文件下创建一个新的文件夹,并添加一个名为 shop.module.ts 的模块定义文件。

然后,我们在默认的 app 模块和新创建的 shop 模块中分别创建组件。

ng g c home/home
ng g c shop/cart
ng g c shop/checkout 
ng g c shop/confirm

CLI 会将 home 分配到 app 模块中,将 cart、checkout、confirm 分配到 shop 模块中,比如,

此时的 shop.module.ts 内容如下:

import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { CheckoutComponent } from "./checkout/checkout.component";
import { CartComponent } from "./cart/cart.component";
import { ConfirmComponent } from "./confirm/confirm.component";

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [CheckoutComponent, CartComponent, ConfirmComponent]
})
export class ShopModule { }

修改根组件

Angular CLI 默认生成的 app.component.ts 组件是应用的主页面,其中包含了一些关于 Angular 的介绍信息,我们将它修改成我们需要的内容。将默认生成的 app.component.html 内容修改为如下内容。

<!--The content below is only a placeholder and can be replaced.-->
<h1>Lazy Load Module</h1>
<a [routerLink]="["/shop"]" >Shop Cart</a>
<router-outlet>
</router-outlet>

这里提供了一个占位的 router-outlet,各个组件将显示在这里面。

同时,提供了一个导航链接,可以直接导航到 /shop/cart 组件。

创建路由

根路由

首先创建根路由。

我们在 app 文新闻资讯网件夹中,添加一个名为 main.routing.ts 的路由配置文件。内容如下:

import { Routes } 新闻资讯网from "@angular/router";
// HomeComponent this components will be eager loaded
import { HomeComponent } from "./home/home.component";

export const routes: Routes = [
    { path: "", component: HomeComponent, pathMatch: "full" },
    { path: "shop", loadChildren: "./shop/shop.module#ShopModule" },
    { path: "**", component: HomeComponent }
];

其中,home 组件是正常的提前加载。

需要注意的是一下几点:

  1. 我们使用了 loadChildren 来延迟加载一个模块。而不是使用提前加载所使用的 component。
  2. 我们使用了一个字符串而不是符号来避免提前加载。
  3. 我们不仅定义了模块的路径,还提供了模块的类名。

在 app.module.ts 中启用根路由。主要需要使用 forRoot 来启用根路由。

import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";
新闻资讯网
import { AppComponent } from "./app.component";
import { HomeComponent } from "./home/home.component";
import { routes } from "./main.routing";
import { RouterModule } from "@angular/router";

@NgModule({
  declarations: [
    AppComponent,
    HomeComponent
  ],
  imports: [
    BrowserModule,
    RouterModule.forRoot(routes)
  ],
  providers: [],
新闻资讯网
  bootstrap: [AppComponent]
})
export class AppModule { }

模块路由

定义模块路由

对于 shop 模块来说,定义路由就没有什么特别了,我们这里可以定义一个名为 shop.route.ts 的路由定义文件,内容如下所示:

import { Routes } from "@angular/router"; 
import { CartComponent } from "./cart/cart.component"; 
import { CheckoutComponent } from "./checkout/checkout.component"; 
import { ConfirmComponent } from "./confirm/confirm.component";  
export const routes: Routes = [     
         { path: "", component: CartComponent },     
         { path: "checkout", component: CheckoutComponent },    
         { path: "confirm", component: ConfirmComponent } 
];

还需要修改一下模块定义文件 shop.module.ts 文件,以使用这个路由定义。注意我们需要使用 forChild 来启用子路由。

import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { CheckoutComponent } from "./checkout/checkout.component";
import { CartComponent } from "./cart/cart.component";
import { ConfirmComponent } from "./confirm/confirm.component";

import { routes } from "./shop.routing"; 
import { RouterModule } from "@angular/router";

@NgModule({
  imports: [
    CommonModule,
    RouterModule.forChild(routes)
  ],
  declarations: [CheckoutComponent, CartComponent, Co新闻资讯网nfirmComponent]
})
export class ShopModule { }

已经一切就绪了。

测试延迟加载

现在启动应用。

ng serve

默认会在 4200 端口启动应用,请打开浏览器,访问:http://localhost:4200/

访问首页的网络访问如下,其中并不包含功能模块的内容。

我们先将网络请求的历史记录清除掉。

然后点击链接,访问 /shop/cart 的时候,网络请求如下,可以看到一个新的脚本文件被加载,这里包含的就是延迟加载的功能模块。

仅仅功能模块被加载了。

其它资源:

  • Lazy Loading Angular Module - Routing

------分隔线----------------------------
http://www.jhsdjj.com/s58rf/4377u.htmlhttp://www.jhsdjj.com/wy/content13.htmlhttp://www.jhsdjj.com/wy/content17.htmlhttp://www.jhsdjj.com/wyt8/content10.htmlhttp://www.jhsdjj.com/wyt8/content20.htmlhttp://www.jhsdjj.com/shenqiw/content20.htmlhttp://www.jhsdjj.com/iq6cjoioe/content16.htmlhttp://www.birfar.com/youxi/content3.htmlhttp://www.birfar.com/youxi/content23.htmlhttp://www.birfar.com/oppsfg6rt/content9.htmlhttp://www.birfar.com/qbro/content13.htmlhttp://www.birfar.com/jnjmf/zlaa8.htmlhttp://www.birfar.com/z1h2s/3ogs7.htmlhttp://www.165sf.com/trbhg45/content3.htmlhttp://www.165sf.com/trbhg45/content13.htmlhttp://www.165sf.com/trbhg45/content20.htmlhttp://www.165sf.com/oppsfg6rt/content5.htmlhttp://www.dy0594.com/zkhrslph/994001459.htmlhttp://www.dy0594.com/hsjwryjk/26868762.htmlhttp://www.dy0594.com/ylfpxbrr/206088428.htmlhttp://www.dy0594.com/pnjnwsts/741678199.htmlhttp://www.dy0594.com/pxlqbyfd/450667220.htmlhttp://www.dy0594.com/jcjkqhrb/80407369.htmlhttp://www.hgmzy.com/mdsfskfm/16133577.htmlhttp://www.lhjcrb.com/jdcpxzym/547656120.htmlhttp://www.lhjcrb.com/mfckkzyp/653024658.htmlhttp://www.lhjcrb.com/qkcnyfpy/976768304.htmlhttp://www.lhjcrb.com/wbtrmkzw/576661725.htmlhttp://www.blg218.com/i8nz3uwlx/content1.htmlhttp://www.blg218.com/i8nz3uwlx/content8.htmlhttp://www.blg218.com/i8nz3uwlx/content13.htmlhttp://www.ylqch.com/ioyyfs5/content6.htmlhttp://www.ylqch.com/ioyyfs5/content10.htmlhttp://www.ylqch.com/9u40a/f1z1l.htmlhttp://www.ylqch.com/7ov9r/0du9w.htmlhttp://www.ylqch.com/bqww3/uc13m.htmlhttp://www.syshdk.com/gb450/content3.htmlhttp://www.syshdk.com/gb450/content22.htmlhttp://www.syshdk.com/qp87o/mhmah.htmlhttp://www.syshdk.com/5pfd1/gw4lu.htmlhttp://www.syshdk.com/ubw/content4.htmlhttp://www.syshdk.com/ubw/content13.htmlhttp://www.syshdk.com/ubw/content16.htmlhttp://www.syshdk.com/ipjgh9/content16.htmlhttp://www.feixuan021.com/bt520/content21.htmlhttp://www.jsjtss.com/cqwz/content5.htmlhttp://www.jsjtss.com/cqwz/content21.htmlhttp://www.birfar.com/jnjmf/zlaa8.htmlhttp://www.165sf.com/trbhg45/content3.htmlhttp://www.blg218.com/i8nz3uwlx/content1.htmlhttp://sdnun.comhttp://gxzha.comhttp://www.xianzhihulian.com/a/6313e_5773.htmlhttp://www.tongyujidian.comhttp://rjzvzc.cnhttp://paegzf.cnhttp://owgqxa.cnhttp://psmanz.cnhttp://yqpuzp.cnhttp://www.ximalaya.com/search/all/kw/http%3A%2F%2Fwww.pyxww.com%2Fmayi%2F/page/1/sc/truehttp://shyingxiao.cn/http://hxw123.cn/http://bjzl123.cn/http://rayynkyy.comhttp://718wr.cnhttp://search.ifeng.com/article?q=www.fanxianw.com/fbm/&c=1http://www.jiangzhangmen.comhttp://xwfyyy.comhttp://www.czpjbL.comhttp://search.ifeng.com/article?q=www.xuanwww.com/news/fbm/&c=1http://www.kuguayangshen.cnhttp://laxhfk.comhttp://laxhyynk.comhttp://wzwtyynk.comhttp://www.gaofangxievip.com/news/?524.htmlhttp://www.xianzhihulian.com/qfnuuf/http://www.jueshiyule.comhttp://www.nabaiyun.comhttp://www.wcqbj.cnhttp://aslcha.cn/sitemap.xmlhttp://www.fspaken.comhttp://www.yibai-fanyi.comhttp://qrwbyz.cn/sitemap.xmlhttp://www.xianzhihulian.com/a/28656_1354.htmlhttp://b5ywx.cnhttp://iewhvo.cn/sitemap.xmlhttp://tjxwzx.cnhttp://djqkh.cnhttp://xxxpz.cnhttp://mgzrh.cnhttp://twlwl.cnhttp://twndx.cnhttp://twpnc.cnhttp://nnnbr.cnhttp://wwlbr.cnhttp://wwkkg.cnhttp://lzgckh.comhttp://wczddp.comhttp://nxxcpg.comhttp://ccgsnx.com围网南宁旧房翻新南宁室内装修金道贵金属直播间网易贵金属直播贵金属直播系统mt4贵金属直播室现货原油直播原油直播室上海黄金交易所石油实盘直播e民通南宁装修设计投资公司贵金属直播室 喊单最准鼎胜财经天然气直播室冲孔网南宁装饰公司MBA包毕业MBA包过班养殖种植南宁别墅装修投资公司自动攻丝机瑞雅阁_无弹窗书友最值得收藏的网络小说阅读网electric bikeelectric mountain bike百度搜索百度搜索百度搜索乐从办公家具长沙搬家公司稳定土拌和站贴合机棉绳投影机租赁自动喷砂机安华卫浴德国阳光官网沼气发电机酒店家具厂家LED屏租赁修正蛇鞭粉AST外汇官网物流配送印度吉三代王者荣耀养殖种植天津网站制作超市货架