Angular预加载延迟模块怎么使用

这次给大家带来Angular预加载延迟模块怎么使用,Angular预加载延迟模块使用的注意事项有哪些,下面就是实战案例,一起来看一下。

在使用路由延迟加载中,我们介绍了如何使用模块来拆分应用,在访问到这个模块的时候, Angular 加载这个模块。但这需要一点时间。在用户第一次点击的时候,会有一点延迟。

我们可以通过预加载路由来修复这个问题。路由可以在用户与其它部分交互的时候,异步加载延迟的模块。这可以使用户在访问延迟模块的时候更快地访问。

本文将在上一个示例的基础上,增加预加载的功能。

在上一节中,我们的根路由定义在 main.routing.ts,我们在 app.module.ts 中使用了根路由定义。

需要注意的是,Home 组件是提前加载的。我们将在系统启动之后渲染这个组件。

在 Angular 渲染 Home 组件之后,用户就可以与应用交互了,我们可以通过简单的配置在后台预加载其它模块。

启用预加载

我们在 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';import { PreloadAllModules } from '@angular/router';@NgModule({ declarations: [  AppComponent,  HomeComponent ], imports: [  BrowserModule,  RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) ], providers: [], bootstrap: [AppComponent]})export class AppModule { }

登录后复制

这个 PreloadAllModules 策略来自 @angular/router,所以我们还需要导入它。

定制预加载策略

router 包中预定义了两个策略:

不预加载 NoPreloading

预加载所有模块 PreloadAllModules

5 秒之后加载模块

但是,您可以自己定义一个定制的策略。这比您想的要更为简单。例如,您希望在应用初始化 5 秒之后加载其余的模块。

您需要实现接口 PreloadingStrategy,我们定义一个 CustomPreloadingStrategy 的自定义策略类。

import { Route } from '@angular/router';import { PreloadingStrategy } from '@angular/router';import { Observable } from 'rxjs/Rx';export class CustomPreloadingStrategy implements PreloadingStrategy {  preload(route: Route, fn: () => Observable): Observable {    return Observable.of(true).delay(5000).flatMap((_: boolean) => fn());  }}

登录后复制

然后,修改 app.module.ts 使用这个自定义策略。需要注意的是,您还需要在 propers 中添加这个类。以实现依赖注入。

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';import { CustomPreloadingStrategy } from './preload';@NgModule({ declarations: [  AppComponent,  HomeComponent ], imports: [  BrowserModule,  RouterModule.forRoot(routes, { preloadingStrategy: CustomPreloadingStrategy }) ], providers: [CustomPreloadingStrategy ], bootstrap: [AppComponent]})export class AppModule { }

登录后复制

你会看到 在 5 秒钟之后,这个功能模块被自动加载了。

加载指定模块

我们还可以在路由中定义附加的参数来指定哪些模块进行预加载,我们使用路由定义中的 data 来提供这个附加的数据。

import { Routes } from '@angular/router';// HomeComponent this components will be eager loadedimport { HomeComponent } from './home/home.component';export const routes: Routes = [  { path: '', component: HomeComponent, pathMatch: 'full' },  { path: 'shop', loadChildren: './shop/shop.module#ShopModule', data: {preload: true} },  { path: '**', component: HomeComponent }];

登录后复制

然后,我们定义新的加载策略。

import { Observable } from 'rxjs/Rx';import { PreloadingStrategy, Route } from '@angular/router';export class PreloadSelectedModules implements PreloadingStrategy {  preload(route: Route, load: Function): Observable {    return route.data && route.data.preload ? load() : Observable.of(null);  }}

登录后复制

最后,在 app.module.ts 中使用这个策略。

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';import { PreloadSelectedModules } from './preload.module';@NgModule({ declarations: [  AppComponent,  HomeComponent ], imports: [  BrowserModule,  RouterModule.forRoot(routes, { preloadingStrategy: PreloadSelectedModules }) ], providers: [PreloadSelectedModules ], bootstrap: [AppComponent]})export class AppModule { }

登录后复制

此时,可以看到,模块直接被预加载了。即使您点击链接,也不会再有新的请求发生。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

js实现简易24小时时钟

ReactJS操作表单选择

以上就是Angular预加载延迟模块怎么使用的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2771236.html

(0)
上一篇 2025年3月8日 12:52:32
下一篇 2025年3月8日 12:52:44

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Angular 4.0的架构使用详解

    这次给大家带来Angular 4.0的架构使用详解,Angular 4.0架构使用的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 前段时间谷歌发布了广受欢迎的Angular JavaScript框架的4.0版本,该版本致力于缩小生…

    编程技术 2025年3月8日
    200
  • vue-resouce怎么设置请求头

    这次给大家带来vue-resouce怎么设置请求头,vue-resouce设置请求头的注意事项有哪些,下面就是实战案例,一起来看一下。 第一种:在Vue实例中设置 var vm = new Vue({ el:’#rrapp’, data:{…

    编程技术 2025年3月8日
    200
  • JS的类型怎么转换

    这次给大家带来JS的类型怎么转换,JS类型转换的注意事项有哪些,下面就是实战案例,一起来看一下。 隐式类型转换 在 JavaScript 中,当我们进行比较操作或者加减乘除四则运算操作时,常常会触发 JavaScript 的隐式类型转换机制…

    编程技术 2025年3月8日
    200
  • Angular HMR功能实现方法(附代码)

    这次给大家带来angular hmr功能实现方法(附代码),angular hmr功能实现的注意事项有哪些,下面就是实战案例,一起来看一下。 最近一个同事在使用Angular的时候,希望能像VUE那样,修改代码后浏览器不刷新,页面对应修改的…

    编程技术 2025年3月8日
    200
  • Vue项目中怎么引用验证码

    这次给大家带来Vue项目中怎么引用验证码,Vue项目中引用验证码的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是腾讯验证码?它长这个样子……:point_down:   最近公司项目要求引入腾讯云验证,要求是这样的: 为了防止别人…

    2025年3月8日 编程技术
    200
  • Angular父组件调用子组件步奏详解

    这次给大家带来Angular父组件调用子组件步奏详解,Angular父组件调用子组件的注意事项有哪些,下面就是实战案例,一起来看一下。 组件是一种特殊的指令,使用更简单的配置项来构建基于组件的应用程序架构.这篇文章主要介绍了Angular组…

    2025年3月8日
    200
  • Angular中单向数据流使用详解

    这次给大家带来Angular中单向数据流使用详解,Angular中单向数据流使用的注意事项有哪些,下面就是实战案例,一起来看一下。 变更检测 Angular 中,数据是由顶部根节点流向最后的叶子节点,整个数据流是单向,构成一颗单向树。 An…

    2025年3月8日
    200
  • vue父组件怎么调用子组件

    这次给大家带来vue父组件怎么调用子组件,vue父组件调用子组件的注意事项有哪些,下面就是实战案例,一起来看一下。 情景:   父组件中引入上传附件的子组件:点击组件可以分别上传对应要求的图片,子组件内部循环可创建多个模块.   父组件传入…

    2025年3月8日
    200
  • Angular实现服务端渲染案列详解

    这次给大家带来Angular实现服务端渲染案列详解,Angular实现服务端渲染的注意事项有哪些,下面就是实战案例,一起来看一下。 Angular在服务端渲染方面提供一套前后端同构解决方案,它就是Angular Universal(统一平台…

    2025年3月8日 编程技术
    200
  • Ajax丢失刷新后数据怎么处理

    这次给大家带来Ajax丢失刷新后数据怎么处理,处理Ajax丢失刷新后数据的注意事项有哪些,下面就是实战案例,一起来看一下。 Ajax 简介: AJAX即“Asynchronous Javascript And XML”(异步JavaScri…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论