Ленивая загрузка в Angular на примере

Введение:

В этой статье мы рассмотрим концепцию ленивой загрузки в Angular с примером для вашего понимания.

Ленивая загрузка:

Вместо того чтобы загружать все модули и компоненты приложения, она позволяет загружать только выбранные модули и компоненты, тем самым сокращая время загрузки. Функция ленивой загрузки загружает компоненты, модули и другие файлы приложения Angular только тогда, когда это необходимо. Эта концепция используется в сложных и больших приложениях. Концепция ленивой загрузки делает приложение очень быстрым и использует меньше памяти.

Давайте рассмотрим один пример ленивой загрузки,

Например:

Для простоты понимания мы начнем с создания нового приложения Angular,

Шаг-1: Откройте командную строку или терминал. Создайте новый проект,

> ng new LazyDemo
Войдите в полноэкранный режим Выйдите из полноэкранного режима


обязательно разрешите маршрутизацию при создании нового проекта или вы можете просто использовать команду : > ng new LazyDemo — маршрутизация

> cd LazyDemo
Вход в полноэкранный режим Выход из полноэкранного режима

Шаг-2: Создайте 3 компонента или любое количество по вашему выбору, просто для демонстрации я создаю 3 компонента,

> ng generate component Number1
  ng generate component Number2
  ng generate component Number3
Вход в полноэкранный режим Выйти из полноэкранного режима

Шаг-3 : Создайте соответствующие файлы модулей в папках каждого из компонентов,

> Number1.module.ts
  Number2.module.ts
  Number3.module.ts
Войти в полноэкранный режим Выход из полноэкранного режима

Теперь наша структура файлов/папок будет выглядеть следующим образом,

Шаг-4 : Создайте соответствующий файл модуля маршрутизатора в каждой папке компонента,

> Number1-routing.module.ts
  Number2-routing.module.ts
  Number3-routing.module.ts
Войти в полноэкранный режим Выйти из полноэкранного режима


Шаг-5 : Импортируйте модуль маршрутизатора в основной модуль приложения app.module.ts,

import { AppRoutingModule } from './app-routing.module';
imports: [
  BrowserModule,
  AppRoutingModule
],
Войти в полноэкранный режим Выйдите из полноэкранного режима

Поскольку мы включили маршрутизацию в начале, она уже будет импортирована в app.module.ts, В случае, если вы забыли применить маршрутизацию в начале, вы можете добавить это, в противном случае вы можете пропустить этот шаг.

Шаг 6: Добавьте код в их собственные модули маршрутизации, добавьте следующий код в Number1-routing.module.ts,

import { NgModule } from "@angular/core";
import { RouterModule, Routes } from "@angular/router";
import { Number1Component } from "./number1.component";
const routes: Routes = [
    { path:"", component: Number1Component }
];
@NgModule({
    exports: [RouterModule],
    imports:[RouterModule.forChild(routes)]
})
export class Number1RouterModule{}
Вход в полноэкранный режим Выйти из полноэкранного режима

Здесь вместо forRoot мы использовали forChild, так как это дочерние модули, которые будут вызываться в главном модуле маршрутизации приложения.

Аналогично добавьте коды в Number2-routing.module.ts и Number3-routing.module.ts.

В Number2-routing.module.ts добавьте следующие коды,

import { NgModule } from "@angular/core";
import { RouterModule, Routes } from "@angular/router";
import { Number2Component } from "./number2.component";
const routes: Routes = [
    { path:"", component: Number2Component }
];
@NgModule({
    exports: [RouterModule],
    imports:[RouterModule.forChild(routes)]
})
export class Number2RouterModule{}
Вход в полноэкранный режим Выйти из полноэкранного режима

В Number3-routing.module.ts добавьте следующие коды,

import { NgModule } from "@angular/core";
import { RouterModule, Routes } from "@angular/router";
import { Number3Component } from "./number3.component";
const routes: Routes = [
    { path:"", component: Number3Component }
];
@NgModule({
    exports: [RouterModule],
    imports:[RouterModule.forChild(routes)]
})
export class Number3RouterModule{}
Войти в полноэкранный режим Выйти из полноэкранного режима

В Number1.module.ts добавьте следующий код,

import { NgModule } from "@angular/core";
import { Number1RouterModule } from "./Number1-routing.module";
import { Number1Component } from "./number1.component";
@NgModule({
    declarations:[Number1Component],
    imports:[Number1RouterModule],
    providers: []
})
export class Number1Module{
}
Войти в полноэкранный режим Выйти из полноэкранного режима


Аналогично добавьте то же самое в два других файла Number2.module.ts и Number3.module.ts,

В Number2.module.ts добавьте следующий код,

import { NgModule } from "@angular/core";
import { Number2RouterModule } from "./Number2-routing.module";
import { Number2Component } from "./number2.component";
@NgModule({
    declarations:[Number2Component],
    imports:[Number2RouterModule],
    providers: []
})
export class Number1Module{
}
Войти в полноэкранный режим Выйти из полноэкранного режима

В Number3.module.ts добавьте следующий код,

import { NgModule } from "@angular/core";
import { Number3RouterModule } from "./Number3-routing.module";
import { Number3Component } from "./number3.component";
@NgModule({
    declarations:[Number3Component],
    imports:[Number3RouterModule],
    providers: []
})
export class Number3Module{
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Шаг 7 : Определите маршруты с помощью атрибута loadChildred в главном модуле маршрутизации приложения. В главный модуль маршрутизации app-routing.module.ts добавьте следующий код,

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [
  {
    path: 'number1',
    loadChildren: () => import('../app/number1/Number1.module').then(x => x.Number1Module)
 },
 {
  path: 'number2',
  loadChildren: () => import('../app/number2/Number2.module').then(x => x.Number2Module)
},
{
  path: 'number3',
  loadChildren: () => import('../app/number3/Number3.module').then(x => x.Number3Module)
},
];
@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
  providers:[]
})
export class AppRoutingModule { }
Войти в полноэкранный режим Выйти из полноэкранного режима

Для справки: https://stackoverflow.com/a/70354559/16487734.

Мы определим дочерние модули в атрибуте loadChildren, определив импорт и имя каждого независимого модуля и путь к нему.

Шаг 8 : Добавьте ссылки маршрутизации на HTML-страницу Route, В app.component.html добавьте следующее,

<!--The content below is only a placeholder and can be replaced.-->
<div style="text-align:center">
  <h2>
    {{ title }}
  </h2>
  <button><a [routerLink]="['/number1']" routerLinkActive="router-link-active" >Number One</a></button><span></span>
  <button><a [routerLink]="['/number2']" routerLinkActive="router-link-active" >Number Two</a></button><span></span>
  <button><a [routerLink]="['/number3']" routerLinkActive="router-link-active" >Number Three</a></button>
</div>
<router-outlet></router-outlet>
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь запустите приложение с помощью ng serve

Вывод:

Вы можете проверить работу этой ленивой загрузки с помощью инспекции, для этого нажмите Ctrl+shift+I. Теперь на вкладке Networks вы можете увидеть, что компоненты не загружаются изначально.

Теперь, если вы нажмете на кнопку компонента номер один, загрузится только этот компонент,

Если вы нажмете на кнопку компонента номер два, то загрузится и этот компонент,

Резюме:

Это действительно уменьшает занимаемую память, загружая только необходимые ресурсы, и применяется в больших приложениях. Компоненты загружаются после того, как мы нажимаем на ссылку, они не загружаются при инициализации или запуске приложения. Надеюсь, эта статья будет полезна для вас примерами и простыми определениями.

                      **Thank you! 😎**
Вход в полноэкранный режим Выход из полноэкранного режима

Оцените статью
Procodings.ru
Добавить комментарий