angularjs懒加载,angular懒加载原理

  angularjs懒加载,angular懒加载原理

  本文带你了解Angular中的路由配置,简单介绍一下预加载配置和懒加载配置,希望对你有所帮助!

  NgModule是角度模块的核心。先说说吧。

  1、@NgModule的作用:

  NgModule最根本的意义是帮助开发者组织业务代码。开发者可以使用NgModule将紧密相关的组件组织在一起,这是第一件事。NgModule用于控制组件、指令、流水线等。可以使用。默认情况下,同一个NgModule中的组件彼此可见,而外部组件只能看到NgModule导出的内容。也就是说,如果你定义的NgModule没有导出任何内容,那么即使你导入了你的模块,外部用户也无法使用其中定义的任何内容。NgModule是打包中使用的最小单位,所有@NgModule和路由配置都将在打包过程中进行检查。Angular底层是用webpack打包的。因为Angular已经为我们配置好了webpack,所以对于开发者来说就容易多了,否则他们需要配置自己的环境。NgModule是路由器可以异步加载的最小单元。路由器可以加载的最小单位是模块,而不是组件。当然,一个模块中只允许放一个组件。许多组件库都这样做。【相关教程推荐:《angular教程》】2、@NgModule结构说明:

  @NgModule({

  声明:[],//属于当前模块的组件、指令和管道

  Imports: [],//当前模板依赖的项,即外部模块(包括httpModule,routes等。)

  Export:[],//声明它应该被其他模块使用。

  提供者:[],//将服务注入当前模块

  Bootstrap: []//默认启动哪个组件(只有根模块可以设置Bootstrap属性)

  })3、懒加载说明

  (1)RouterModule对象提供了两个静态的方法:forRoot()和forChild()来配置路由信息。

  ForRoot()//在主模块中为Child()``//定义主路由信息,并在功能模块(子模块)(2)懒加载:loadChildren中应用。

  这里并没有给AppModule添加对应的模块,而是通过loadChildren属性告诉角路由按照loadChildren属性配置的路径加载对应的模块。这是模块懒加载功能的具体应用。当用户访问/xxx/**路径时,会加载相应的模块,减少了应用程序启动时加载资源的大小。loadChildren的属性值由三部分组成:

  导入模块的相对路径#分隔符是必需的。导出模块类的名称是(3)预加载

  在延迟加载的情况下,当路由第一次加载模块时,有时响应会延迟。这时可以采用预加载策略来解决这个问题。

  Angular提供了两种装载策略,

  preloadall modules-preload no preloading-不预加载(默认)。RouterModule.forRoo()的第二个参数可以添加配置选项,其中一个是preloadingStrategy配置,这是一个预加载策略配置。

  //使用默认预加载-预加载所有模块

  从“@angular/core”导入{ ng module };

  从“”导入{ AppComponent }。/app . component ;

  从导入{ routes }。/main . routing ;

  从“@angular/router”导入{ router module };

  从“@angular/router”导入{ PreloadAllModules };

  @NgModule({

  声明:[AppComponent],

  imports: [ BrowserModule,RouterModule.forRoot(routes,{ preloadingStrategy:preloadall modules })],

  提供商:[],

  引导:[AppComponent] })

  导出类AppModule {}但是,我们更喜欢自己控制模块的预加载,所以需要自定义预加载策略。

  5秒后自定义加载所有模块。

  在应用程序构建的同一级别创建一个新的自定义预加载策略. ts文件。

  从“@angular/router”导入{ Route };

  从“@angular/router”导入{ preloading strategy };

  从“rxjs/Rx”导入{ Observable };

  导出类CustomPreloadingStrategy实现PreloadingStrategy {

  preload(route: Route,fn:()=observable boolean):observable boolean {

  返回可观测的(真)。延时(5000)。flat map((_:boolean)=fn());

  }

  }注入到app.modules.ts的提供者中

  从“@angular/platform-browser”导入{ browser module };

  从“@angular/core”导入{ ng module };

  从""导入{ AppComponent } ./app。组件;

  从""导入{ HomeComponent } ./家/家。组件;

  从导入{路线} ./main。路由;

  从" @angular/router "导入{路由器模块};

  从""导入{ CustomPreloadingStrategy } ./preload ;

  @NgModule({

  声明:[

  AppComponent,

  家庭组件

  ],

  进口:[

  浏览器模块,

  RouterModule.forRoot(routes,{ preloadingStrategy:CustomPreloadingStrategy })

  ],

  提供者:[CustomPreloadingStrategy ],

  引导:[应用组件]

  })

  导出类AppModule { }B,自定义-指定模块预加载

  在应用组建的同级新建一个选择性预加载策略文件(需要在app-routing.module.ts中的提供者注入,然后在路由中定义的数据通过附加参数来设置是否预加载)

  从" @角度/核心"导入{内射};

  从" @angular/router "导入{ PreloadingStrategy,Route };

  从" rxjs/可观察"导入{可观察的};

  导入 rxjs/add/observable/of ;

  @可注射()

  导出类选择性预读策略实现预加载策略{

  预加载的模块:string[]=[];

  preload(route: Route,load:()=Observableany):Observableany {

  如果(路线。数据路由。数据[ preload ]){

  返回load();

  }否则{

  返回可观察的。of(空);

  }

  }

  }app-routing.module.ts(此文件懒加载与预加载相结合)

  从" @角度/核心"导入{ ng模块};

  从" @angular/router "导入{ RouterModule,Routes }。

  从导入{ CanDeactivateGuard } ./guard/can-deactivate-guard。服务;

  从""导入{ SelectivePreloadingStrategy } ./select-preload-strategy ;//预加载

  从""导入{ PageNotFoundComponent } ./未找到。组件;

  常量属性:Routes=[

  {路径: ,重定向到:首页,路径匹配:满 },

  { path: mian ,loadChildren: ./main/main。模块#主模块 },//懒加载(在这个层级的路由器配置文件及组件文件都不需要引入该组建)

  {路径:" home ",loadChildren:" " ./home/home.module#HomeModule ,数据:{ preload: true } },//懒加载预加载

  {路径:"**",组件:PageNotFoundComponent } //注意要放到最后

  ];

  @NgModule({

  进口:[

  路由器模块。对于根(适当的,{

  enableTracing: true,//-仅用于调试目的

  预加载策略:选择性预加载策略//预加载

  })

  ],

  出口:[

  路由器模块

  ],

  提供商:[

  CanDeactivateGuard,

  选择性预读策略

  ]

  })

  导出类别批准模块{ }4、子路由创建步骤(没有靠指令创建,直接手动)

  (1)新建主文件夹

  目录主要的

  main.component.html

  主组件

  主组件

  主模块

  主路由。模块. ts

  main.service.ts

  目录aa。组件。html la。组件。scssa。组件。分时(同timesharing)目录bb。组件。html组件。SCS某人。组件。分时(同timesharing)

  比如在上面main.component.html有个区域用于放子视图(以下我都先讲思路,再放关键代码,其他不赘述)

  差异下面的区域是另一个路由出口/div

  路由器出口/路由器出口!-此处依照下面的路由配置,默认显示组件组件的内容- (1)、在主路由。模块. ts里面配置文件夹主要的下的路由,需要引用各组件的组件(需要配置路由的组件)

  从" @角度/核心"导入{ ng模块};

  从" @angular/router "导入{RouterModule,Routes }。

  从导入{主要组件} ./main。组件;

  从""导入{组件} ./A/A . component ;

  从""导入{ b组件} ./B/B . component ;

  const mainRoute: Routes=[

  {

  路径: ,

  组件:主组件,

  数据:{

  标题: 面试预约,

  },

  儿童:[

  {

  路径: ,//路径为空表示默认路由

  组件:一个组件,

  数据:{

  标题: 大活动,

  }

  },

  {

  路径:"活动",

  组件:b组件,

  数据:{

  标题: 中活动,

  }

  }

  ]

  }

  ];

  @NgModule({

  进口:[

  路由器模块。儿童(主要路线)

  ],

  出口:[

  路由器模块

  ]

  })

  导出类主路由模块{

  }(2)、主要服务一般用于放超文本传送协议(超文本传输协议的缩写)请求

  从""导入{应用服务} ./././app。服务;

  从" rxjs/可观察"导入{可观察的};

  从" @角度/核心"导入{内射};

  从" @angular/common/http "导入{ http params };

  从""导入{ PageData,ActivitysManage } ./model/activitys-manage ;

  从" rxjs "导入{行为主体};

  从""导入{PageDataBig,ActivitySmall,PageDataSmall } ./model/activitys-manage ;

  @可注射()

  导出类主要服务{

  }main文件夹下的组件如要调用MainService,需要在组件的分时(同分时)文件引入主要服务

  (3)、在主模块中引入各组件(包括自身、路由配置文件所用到的所有组件以及路由的模块)

  从" @angular/forms "导入{表单模块};

  从" @angular/common "导入{公共模块};

  从导入{主要组件} ./面试-预约。组件;

  从""导入{组件} ./A/A . component ;

  从""导入{ b组件} ./B/B . component ;

  从" @角度/核心"导入{ ng模块};

  从导入{核心帧普通模块}././常见/常见。模块;

  从""导入{主路由模块} ./main-routing。模块;

  从导入{ NgZorroAntdModule }././佐罗/ng-佐罗-antd。模块;

  从""导入{主要服务} ./面试-预约。服务;

  @NgModule({

  导入:[FormsModule,CoreFrameCommonModule,CommonModule,MainRoutingModule,NgZorroAntdModule],

  出口:[],

  声明:[主组件,子组件,子组件],

  提供商:[MainService],

  })

  导出类主模块{ }更多编程相关知识,请访问:编程视频!以上就是浅谈有角的中的预加载配置、懒加载配置的详细内容,更多请关注我们其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: