Maison interface Web js tutoriel Une brève discussion sur la configuration de préchargement et la configuration de chargement paresseux dans Angular

Une brève discussion sur la configuration de préchargement et la configuration de chargement paresseux dans Angular

Nov 05, 2021 am 10:13 AM
angular 路由配置

Cet article vous amènera à comprendre la configuration du routage dans Angular et à présenter brièvement la configuration de préchargement et la configuration de chargement paresseux. J'espère que cela vous sera utile !

Une brève discussion sur la configuration de préchargement et la configuration de chargement paresseux dans Angular

NgModule est le cœur du module Angular Parlons-en d'abord.

1. Le rôle de @NgModule :

  • La signification la plus fondamentale de NgModule est d'aider les développeurs à organiser le code métier. Les développeurs peuvent utiliser NgModule pour organiser ensemble des composants étroitement liés, ce qui est la première priorité.
  • NgModule est utilisé pour contrôler si les composants, instructions, tuyaux, etc. peuvent être utilisés. Les composants d'un même NgModule sont visibles les uns par les autres, tandis que pour les composants externes, seul le contenu exporté par NgModule peut être vu, c'est-à-dire. pour dire, si le NgModule que vous définissez n'exporte aucun contenu, les utilisateurs externes ne pourront utiliser aucun contenu qui y est défini même s'ils importent votre module.
  • NgModule est la plus petite unité utilisée lors de l'empaquetage. Lors de l'empaquetage, toutes les configurations @NgModule et de routage seront vérifiées. La couche inférieure d'Angular est empaquetée à l'aide de webpack. Comme Angular a déjà configuré le webpack pour nous, c'est beaucoup plus facile pour les développeurs, sinon ils doivent configurer eux-mêmes l'environnement.
  • NgModule est la plus petite unité que le routeur peut charger de manière asynchrone. La plus petite unité que le routeur peut charger est un module, pas un composant. Bien entendu, il est permis de placer un seul composant dans un module, et de nombreuses bibliothèques de composants le font. [Recommandations de didacticiel associées : "tutoriel angulaire"]

2. Description de la structure @NgModule :

@NgModule({ 
  declarations: [], //属于当前模块的组件、指令及管道
  imports: [], //当前模板所依赖的项,即外部模块(包括httpModule、路由等)
  export:[],//声明出应用给其他的module使用
  providers: [], //注入服务到当前模块
  bootstrap: []//默认启动哪个组件(只有根模块才能设置bootstrap属性)
})
Copier après la connexion

3. Description du chargement paresseux

(1) RouterModule L'objet code> fournit deux méthodes statiques : <code>forRoot() et forChild() pour configurer les informations de routage. RouterModule对象提供了两个静态的方法:forRoot()forChild()来配置路由信息。

  • forRoot()//在主模块中定义主要的路由信息
  • forChild()``//应用在特性模块(子模块)中

(2)懒加载:loadChildren

此处并没有将对应的模块加入到AppModule中,而是通过loadChildren属性,告诉Angular路由依据loadChildren属性配置的路径去加载对应的模块。这就是模块懒加载功能的具体应用,当用户访问 /xxx/** 路径的时候,才会加载对应的模块,这减少了应用启动时加载资源的大小。 loadChildren的属性值由三部分组成:

  • 需要导入Module的相对路径
  • #分隔符
  • 导出模块类的名称

(3)预加载

在使用懒加载的情况下,路由第一次加载某个模块时,有时反应有延迟。这时就可以用预加载策略来解决这个问题。

Angular提供了两种加载策略,

  • PreloadAllModules-预加载
  • NoPreloading-没有预加载(默认)。

RouterModule.forRoo()第二个参数可以添加配置选项,配置选项中就有一个是preloadingStrategy

forRoot()//Définir les principales informations de routage dans le module principal

forChild()``//Appliquer dans le module de fonctionnalités (sous-module)

(2) Chargement paresseux : loadChildren

Le module correspondant n'est pas ajouté à l'AppModule ici, mais l'attribut loadChildren est utilisé pour indiquer à Angular d'acheminer en fonction de loadChildren code Le chemin configuré par l'attribut code> permet de charger le module correspondant. Il s'agit de l'application spécifique de la fonction de chargement différé du module Lorsque l'utilisateur accède au chemin /xxx/**, le module correspondant sera chargé, ce qui réduit la taille des ressources chargées au démarrage de l'application. La valeur de l'attribut loadChildren se compose de trois parties :

Le chemin relatif du module importé

# séparateur Le nom de la classe du module exporté

(3) Préchargement

    Dans le cas d'un chargement paresseux , Lorsque le routage charge un module pour la première fois, il y a parfois un retard dans la réponse. À ce stade, vous pouvez utiliser la stratégie de préchargement pour résoudre ce problème.
  • Angular propose deux stratégies de chargement,

  • PreloadAllModules-préchargement

    NoPreloading-pas de préchargement (par défaut).
  • Le deuxième paramètre de RouterModule.forRoo() peut ajouter des options de configuration. L'une des options de configuration est la configuration preloadingStrategy. est une configuration de stratégie préchargée.

    //使用默认预加载-预加载全部模块
    import { NgModule } from &#39;@angular/core&#39;; 
    import { AppComponent } from &#39;./app.component&#39;; 
    import { routes } from &#39;./main.routing&#39;; 
    import { RouterModule } from &#39;@angular/router&#39;; 
    import { PreloadAllModules } from &#39;@angular/router&#39;; 
    @NgModule({ 
      declarations: [AppComponent], 
      imports: [ BrowserModule, RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) ], 
      providers: [], 
      bootstrap: [AppComponent] }) 
    export class AppModule { }
    Copier après la connexion
  • Cependant, nous préférons contrôler nous-mêmes le préchargement des modules. Dans ce cas, nous devons personnaliser la stratégie de préchargement
  • A Chargement personnalisé de tous les modules après 5 secondes

  • Créez une nouvelle personnalisation au même niveau que le. Fichier app -preloading-strategy.ts
  • import { Route } from &#39;@angular/router&#39;;
    import { PreloadingStrategy } from &#39;@angular/router&#39;;
    import { Observable } from &#39;rxjs/Rx&#39;;
    
    export class CustomPreloadingStrategy implements PreloadingStrategy {
        preload(route: Route, fn: () => Observable<boolean>): Observable<boolean> {
            return Observable.of(true).delay(5000).flatMap((_: boolean) => fn());
        }
    }
    Copier après la connexion

    Injecter

    import { BrowserModule } from &#39;@angular/platform-browser&#39;;
    import { NgModule } from &#39;@angular/core&#39;;
    
    import { AppComponent } from &#39;./app.component&#39;;
    import { HomeComponent } from &#39;./home/home.component&#39;;
    import { routes } from &#39;./main.routing&#39;;
    import { RouterModule } from &#39;@angular/router&#39;;
    import { CustomPreloadingStrategy } from &#39;./preload&#39;;
    
    @NgModule({
      declarations: [
        AppComponent,
        HomeComponent
      ],
      imports: [
        BrowserModule,
        RouterModule.forRoot(routes, { preloadingStrategy:  CustomPreloadingStrategy })
      ],
      providers: [CustomPreloadingStrategy ],
      bootstrap: [AppComponent]
    })
    export class AppModule { }
    Copier après la connexion
  • dans les fournisseurs de app.modules.ts B. Personnaliser - spécifier le préchargement du module
  • Créer un nouveau fichier select-preloading-strategy.ts au même niveau que le l'application est construite (vous devez injecter les fournisseurs dans app-routing.module.ts, puis utiliser des paramètres supplémentaires pour définir s'il faut précharger les données définies dans la route)

    import { Injectable } from &#39;@angular/core&#39;;
    import { PreloadingStrategy, Route } from &#39;@angular/router&#39;;
    import { Observable} from &#39;rxjs/Observable&#39;;
    import &#39;rxjs/add/observable/of&#39;;
    @Injectable()
    export class SelectivePreloadingStrategy implements PreloadingStrategy {
      preloadedModules: string[] = [];
    
      preload(route: Route, load: () => Observable<any>): Observable<any> {
        if (route.data && route.data[&#39;preload&#39;]) {
          return load();
        } else {
          return Observable.of(null);
        }
      }
    }
    Copier après la connexion
      app-routing.module.ts (Chargement paresseux de ce fichier est similaire au préchargement combiné)
    • import { NgModule } from &#39;@angular/core&#39;;
      import { RouterModule, Routes } from &#39;@angular/router&#39;;
      import { CanDeactivateGuard } from &#39;./guard/can-deactivate-guard.service&#39;;
      import { SelectivePreloadingStrategy } from &#39;./selective-preloading-strategy&#39;; // 预加载
      import { PageNotFoundComponent } from &#39;./not-found.component&#39;;
      const appRoutes: Routes = [
      { path: &#39;&#39;, redirectTo: &#39;home&#39;, pathMatch: &#39;full&#39;},
      { path: &#39;mian&#39;, loadChildren: &#39;./main/mian.module#MainModule&#39; }, // 懒加载(在这个层级的router配置文件及module文件都不需要引入该组建)
      { path: &#39;home&#39;, loadChildren: &#39;./home/home.module#HomeModule&#39;, data: { preload: true } }, // 懒加载 + 预加载
      { path: &#39;**&#39;, component: PageNotFoundComponent } // 注意要放到最后
      ];
      @NgModule({
        imports: [
          RouterModule.forRoot(appRoutes,{
            enableTracing: true, // <-- debugging purposes only
            preloadingStrategy: SelectivePreloadingStrategy // 预加载
          })
        ],
        exports: [
          RouterModule
        ],
        providers: [
          CanDeactivateGuard,
          SelectivePreloadingStrategy
        ]
      })
      export class AppRoutingModule { }
      Copier après la connexion
      4. Étapes de création de sous-route (aucune instruction pour créer, directement manuel)
      • (1) Créer un nouveau dossier principal
    • répertoire principal
      • main .component.html
      • main.component.scss
    • main.component.ts
      • main.module.ts
    • main-routing.module.ts
      • main .service. ts
    • Répertoire A
    A.component.html

A.component.scss

🎜🎜A.component.ts🎜 🎜🎜🎜Annuaire B🎜🎜🎜 🎜B .component.html🎜🎜🎜🎜 🎜🎜B.component.scss🎜🎜🎜🎜🎜🎜B.component.ts🎜🎜🎜🎜🎜🎜🎜Par exemple, dans main.component.html ci-dessus , il y a une zone pour placer des sous-vues (je vais d'abord parler des idées), puis mettre le code clé, et je n'entrerai pas dans les détails du reste)🎜
<div>下面的区域是另一个路由出口</div>
<router-outlet></router-outlet><!--此处依照下面的路由配置,默认显示AComponent组件的内容-->
Copier après la connexion
🎜(1) Configurez le routage sous le dossier main dans main-routing. .module.ts. Vous devez référencer les composants de chaque composant (les composants qui doivent être configurés pour le routage)🎜
import {NgModule} from &#39;@angular/core&#39;;
import {RouterModule, Routes} from &#39;@angular/router&#39;;
import {MainComponent} from &#39;./main.component&#39;;
import{AComponent} from &#39;./A/A.component&#39;;
import{BComponent} from &#39;./B/B.component&#39;;
const mainRoute: Routes = [
  {
    path: &#39;&#39;,
    component: MainComponent,
    data: {
      title: &#39;面试预约&#39;,
    },
    children: [
      {
        path: &#39;&#39;,//path为空表示默认路由
        component: AComponent,
        data: {
          title: &#39;大活动&#39;,
        }
      },
      {
        path: &#39;activity&#39;,
        component: BComponent,
        data: {
          title: &#39;中活动&#39;,
        }
      }
    ]
  }
];


@NgModule({
  imports: [
    RouterModule.forChild(mainRoute)
  ],
  exports: [
    RouterModule
  ]
})
export class MainRoutingModule{
}
Copier après la connexion
🎜 (2), main.service.ts est généralement utilisé pour placer des requêtes http🎜
import { AppService } from &#39;./../../app.service&#39;;
import { Observable } from &#39;rxjs/Observable&#39;;
import { Injectable } from &#39;@angular/core&#39;;
import { HttpParams } from &#39;@angular/common/http&#39;;
import { PageData, ActivitysManage } from &#39;./model/activitys-manage&#39;;
import { BehaviorSubject } from &#39;rxjs&#39;;
import {PageDataBig, ActivitySmall, PageDataSmall } from &#39;./model/activitys-manage&#39;;
@Injectable()
export class MainService {
  
}
Copier après la connexion

main文件夹下的组件如要调用MainService,需要在组件的ts文件引入MainService

(3)、在main.module.ts中引入各组件(包括自身、路由配置文件所用到的所有组件以及路由的module)

import { FormsModule } from &#39;@angular/forms&#39;;
import { CommonModule } from &#39;@angular/common&#39;;
import { MainComponent } from &#39;./interview-appointment.component&#39;;
import { AComponent } from &#39;./A/A.component&#39;;
import { BComponent } from &#39;./B/B.component&#39;;
import { NgModule } from &#39;@angular/core&#39;;
import { CoreFrameCommonModule } from &#39;../../common/common.module&#39;;
import { MainRoutingModule } from &#39;./main-routing.module&#39;;
import { NgZorroAntdModule } from &#39;../../zorro/ng-zorro-antd.module&#39;;
import { MainService } from &#39;./interview-appointment.service&#39;;
@NgModule({
  imports: [FormsModule,CoreFrameCommonModule, CommonModule, MainRoutingModule,NgZorroAntdModule],
  exports: [],
  declarations: [MainComponent,AComponent,BComponent],
  providers: [MainService],
})
export class MainModule{ }
Copier après la connexion

更多编程相关知识,请访问:编程视频!!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Parlons des métadonnées et des décorateurs dans Angular Parlons des métadonnées et des décorateurs dans Angular Feb 28, 2022 am 11:10 AM

Cet article poursuit l'apprentissage d'Angular, vous amène à comprendre les métadonnées et les décorateurs dans Angular, et comprend brièvement leur utilisation. J'espère qu'il sera utile à tout le monde !

Comment installer Angular sur Ubuntu 24.04 Comment installer Angular sur Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js est une plateforme JavaScript librement accessible pour créer des applications dynamiques. Il vous permet d'exprimer rapidement et clairement divers aspects de votre application en étendant la syntaxe HTML en tant que langage de modèle. Angular.js fournit une gamme d'outils pour vous aider à écrire, mettre à jour et tester votre code. De plus, il offre de nombreuses fonctionnalités telles que le routage et la gestion des formulaires. Ce guide expliquera comment installer Angular sur Ubuntu24. Tout d’abord, vous devez installer Node.js. Node.js est un environnement d'exécution JavaScript basé sur le moteur ChromeV8 qui vous permet d'exécuter du code JavaScript côté serveur. Être à Ub

Explication détaillée du gestionnaire d'état d'apprentissage angulaire NgRx Explication détaillée du gestionnaire d'état d'apprentissage angulaire NgRx May 25, 2022 am 11:01 AM

Cet article vous donnera une compréhension approfondie du gestionnaire d'état NgRx d'Angular et vous présentera comment utiliser NgRx. J'espère qu'il vous sera utile !

Un article explorant le rendu côté serveur (SSR) dans Angular Un article explorant le rendu côté serveur (SSR) dans Angular Dec 27, 2022 pm 07:24 PM

Connaissez-vous Angular Universel ? Cela peut aider le site Web à fournir un meilleur support SEO !

Angular + NG-ZORRO développent rapidement un système backend Angular + NG-ZORRO développent rapidement un système backend Apr 21, 2022 am 10:45 AM

Cet article partagera avec vous une expérience pratique d'Angular et apprendra comment développer rapidement un système backend en utilisant Angualr combiné avec ng-zorro. J'espère que cela sera utile à tout le monde !

Comment utiliser PHP et Angular pour le développement front-end Comment utiliser PHP et Angular pour le développement front-end May 11, 2023 pm 04:04 PM

Avec le développement rapide d'Internet, la technologie de développement front-end s'améliore et se répète constamment. PHP et Angular sont deux technologies largement utilisées dans le développement front-end. PHP est un langage de script côté serveur capable de gérer des tâches telles que le traitement des formulaires, la génération de pages dynamiques et la gestion des autorisations d'accès. Angular est un framework JavaScript qui peut être utilisé pour développer des applications monopage et créer des applications Web composées de composants. Cet article explique comment utiliser PHP et Angular pour le développement front-end et comment les combiner.

Une brève analyse de la façon d'utiliser monaco-editor en angulaire Une brève analyse de la façon d'utiliser monaco-editor en angulaire Oct 17, 2022 pm 08:04 PM

Comment utiliser monaco-editor en angulaire ? L'article suivant enregistre l'utilisation de monaco-editor dans angulaire qui a été utilisé dans une entreprise récente. J'espère qu'il sera utile à tout le monde !

Comment utiliser le framework CodeIgniter4 en php ? Comment utiliser le framework CodeIgniter4 en php ? May 31, 2023 pm 02:51 PM

PHP est un langage de programmation très populaire et CodeIgniter4 est un framework PHP couramment utilisé. Lors du développement d'applications Web, l'utilisation de frameworks est très utile. Elle peut accélérer le processus de développement, améliorer la qualité du code et réduire les coûts de maintenance. Cet article expliquera comment utiliser le framework CodeIgniter4. Installation du framework CodeIgniter4 Le framework CodeIgniter4 peut être téléchargé depuis le site officiel (https://codeigniter.com/). Vers le bas

See all articles