ホームページ ウェブフロントエンド jsチュートリアル Angular のプリロード構成と遅延ロード構成に関する簡単な説明

Angular のプリロード構成と遅延ロード構成に関する簡単な説明

Nov 05, 2021 am 10:13 AM
angular ルーティング設定

この記事では、Angular のルーティング設定を理解し、プリロード設定と遅延読み込み設定について簡単に紹介します。

Angular のプリロード構成と遅延ロード構成に関する簡単な説明

NgModule は Angular モジュールのコアです。最初にそれについて説明しましょう。

1. @NgModule の役割:

  • NgModule の最も基本的な意味は、開発者がビジネス コードを整理できるようにすることです。密接に関連するコンポーネントをまとめて整理するには、NgModule を使用するのが基本です。
  • NgModule は、コンポーネント、命令、パイプなどを使用できるかどうかを制御するために使用されます。同じ NgModule 内のコンポーネントはデフォルトで相互に表示されます。外部コンポーネントの場合は、NgModule によってエクスポートされたコンテンツのみが表示されますつまり、定義した NgModule がコンテンツをエクスポートしない場合、外部ユーザーは、モジュールをインポートしたとしても、その中で定義されたコンテンツを使用できません。
  • NgModule はパッケージ化するときに使用される最小単位です。パッケージ化するとき、すべての @NgModule とルーティング設定がチェックされます。Angular の最下層は webpack を使用してパッケージ化されます。 Angular は既に Webpack を構成しているため、開発者にとっては非常に簡単です。そうでない場合は、環境を自分で構成する必要があります。
  • NgModule は Router が非同期にロードできる最小単位です Router がロードできる最小単位はコンポーネントではなくモジュールです。もちろん、モジュール内にコンポーネントを 1 つだけ配置することは許可されており、多くのコンポーネント ライブラリでこれが行われます。 [関連チュートリアルの推奨事項: "angular チュートリアル"]

2. @NgModule 構造の説明:

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

3. 遅延ロード命令

# (1) RouterModule オブジェクトは 2 つの静的メソッドを提供します: forRoot () および forChild() を使用してルーティング情報を構成します。

  • forRoot()//メインモジュールでメインのルーティング情報を定義します
  • forChild()``//Application in feature module (sub-module)

(2) 遅延読み込み:loadChildren

対応するモジュールはここで AppModule に追加されませんが、 loadChildren 属性は、loadChildren 属性で構成されたパスに基づいて、対応するモジュールをロードするように Angular ルーティングに指示します。これはモジュールの遅延ロード機能の具体的なアプリケーションであり、ユーザーが /xxx/** パスにアクセスすると、対応するモジュールがロードされ、アプリケーションの起動時にロードされるリソースのサイズが削減されます。 loadChildren の属性値は 3 つの部分で構成されます:

  • インポートする必要があるモジュールの相対パス
  • #Separator
  • エクスポートされたモジュールの名前class

(3) プリロード

遅延ロードを使用すると、ルートが初めてモジュールをロードするときに応答が遅れることがあります。現時点では、プリロード戦略を使用してこの問題を解決できます。

Angular は 2 つの読み込み戦略を提供します。

  • PreloadAllModules-preloading
  • NoPreloading-プリロードなし (デフォルト)。

RouterModule.forRoo() 2 番目のパラメータ は構成オプションを追加できます。構成オプションの 1 つは preloadingStrategy 構成です。この構成はプリロードポリシー設定。

//使用默认预加载-预加载全部模块
import { NgModule } from '@angular/core'; 
import { AppComponent } from './app.component'; 
import { routes } from './main.routing'; 
import { RouterModule } from '@angular/router'; 
import { PreloadAllModules } from '@angular/router'; 
@NgModule({ 
  declarations: [AppComponent], 
  imports: [ BrowserModule, RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules }) ], 
  providers: [], 
  bootstrap: [AppComponent] }) 
export class AppModule { }
ログイン後にコピー

ただし、モジュールのプリロードを自分で制御することを好みます。この場合、プリロード戦略をカスタマイズする必要があります

A. カスタマイズ - 5 秒後にすべてのモジュールをロードします

アプリと同じレベルで新しいcustom-preloading-strategy.tsファイルを作成します。

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<boolean>): Observable<boolean> {
        return Observable.of(true).delay(5000).flatMap((_: boolean) => fn());
    }
}
ログイン後にコピー

#
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 { }
ログイン後にコピー

B、カスタム指定モジュールをapp.modulesのプロバイダーに挿入します。 ts Preloading

selective-preloading-strategy.ts ファイルをアプリと同じレベルに作成します (このファイルは、プロバイダーによって app-routing.module.ts に挿入され、ルートで定義されたデータが挿入される必要があります)追加パラメータを介して渡されます) プリロードするかどうかを設定します)

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);
    }
  }
}
ログイン後にコピー

app-routing.module.ts (このファイルは遅延読み込みとプリロードを組み合わせています)

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 { }
ログイン後にコピー

4. Sub -routing 作成手順 (作成手順なし、直接手動) (1) 新しいメイン フォルダーを作成します

Directory main

    main.component .html
  • main.component.scss
  • main.component.ts
  • main.module.ts
  • main-routing.module.ts
  • ##main.service.ts
  • ディレクトリ A

      A.component.html
      ##A.component.scss
      A.component.ts
      • ディレクトリB
    • B.component .html
      B.component.scss
      • ##B.component.ts
    たとえば、上記の main.component.html には、サブビューを配置するための領域があります (アイデアについては以下で説明します) (その他は詳しく説明しません)
  • <div>下面的区域是另一个路由出口</div>
    <router-outlet></router-outlet><!--此处依照下面的路由配置,默认显示AComponent组件的内容-->
    ログイン後にコピー
(1). main-routing.module.tsのmainフォルダ配下にルーティングを設定します。コンポーネントを参照する必要があります。各コンポーネント (ルーティングを設定する必要があるコンポーネント) の

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{
}
ログイン後にコピー

(2)、通常、main.service.ts は 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 {
  
}
ログイン後にコピー

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{ }
ログイン後にコピー

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

以上がAngular のプリロード構成と遅延ロード構成に関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Angular のメタデータとデコレータについて話しましょう Angular のメタデータとデコレータについて話しましょう Feb 28, 2022 am 11:10 AM

この記事では、Angular の学習を継続し、Angular のメタデータとデコレータを理解し、それらの使用法を簡単に理解します。

Ubuntu 24.04 に Angular をインストールする方法 Ubuntu 24.04 に Angular をインストールする方法 Mar 23, 2024 pm 12:20 PM

Angular.js は、動的アプリケーションを作成するための無料でアクセスできる JavaScript プラットフォームです。 HTML の構文をテンプレート言語として拡張することで、アプリケーションのさまざまな側面を迅速かつ明確に表現できます。 Angular.js は、コードの作成、更新、テストに役立つさまざまなツールを提供します。さらに、ルーティングやフォーム管理などの多くの機能も提供します。このガイドでは、Ubuntu24 に Angular をインストールする方法について説明します。まず、Node.js をインストールする必要があります。 Node.js は、ChromeV8 エンジンに基づく JavaScript 実行環境で、サーバー側で JavaScript コードを実行できます。ウブにいるために

Angular Learning State Manager NgRx の詳細な説明 Angular Learning State Manager NgRx の詳細な説明 May 25, 2022 am 11:01 AM

この記事では、Angular のステートマネージャー NgRx について深く理解し、NgRx の使用方法を紹介します。

Angular で Monaco エディターを使用する方法の簡単な分析 Angular で Monaco エディターを使用する方法の簡単な分析 Oct 17, 2022 pm 08:04 PM

Angularでモナコエディタを使用するにはどうすればよいですか?以下の記事は、最近業務で使用したangularでのmonaco-editorの使い方を記録したものですので、皆様のお役に立てれば幸いです。

Angular のサーバーサイド レンダリング (SSR) について説明する記事 Angular のサーバーサイド レンダリング (SSR) について説明する記事 Dec 27, 2022 pm 07:24 PM

Angular Universal をご存知ですか?これは、Web サイトがより優れた SEO サポートを提供するのに役立ちます。

Angular + NG-ZORRO でバックエンド システムを迅速に開発 Angular + NG-ZORRO でバックエンド システムを迅速に開発 Apr 21, 2022 am 10:45 AM

この記事では、Angular の実践的な経験を共有し、angualr と ng-zorro を組み合わせてバックエンド システムを迅速に開発する方法を学びます。

フロントエンド開発に PHP と Angular を使用する方法 フロントエンド開発に PHP と Angular を使用する方法 May 11, 2023 pm 04:04 PM

インターネットの急速な発展に伴い、フロントエンド開発テクノロジーも常に改善され、反復されています。 PHP と Angular は、フロントエンド開発で広く使用されている 2 つのテクノロジーです。 PHP は、フォームの処理、動的ページの生成、アクセス許可の管理などのタスクを処理できるサーバー側スクリプト言語です。 Angular は、単一ページ アプリケーションの開発やコンポーネント化された Web アプリケーションの構築に使用できる JavaScript フレームワークです。この記事では、PHPとAngularをフロントエンド開発に使用する方法と、それらを組み合わせる方法を紹介します。

PHPでCodeIgniter4フレームワークを使用するにはどうすればよいですか? PHPでCodeIgniter4フレームワークを使用するにはどうすればよいですか? May 31, 2023 pm 02:51 PM

PHP は非常に人気のあるプログラミング言語であり、CodeIgniter4 は一般的に使用される PHP フレームワークです。 Web アプリケーションを開発する場合、フレームワークを使用すると、開発プロセスのスピードアップ、コードの品質の向上、メンテナンス コストの削減が可能になり、非常に役立ちます。この記事ではCodeIgniter4フレームワークの使い方を紹介します。 CodeIgniter4 フレームワークのインストール CodeIgniter4 フレームワークは、公式 Web サイト (https://codeigniter.com/) からダウンロードできます。下

See all articles