찾다
웹 프론트엔드JS 튜토리얼Angular의 사전 로드 구성 및 지연 로드 구성에 대한 간략한 설명

이 기사에서는 Angular의 라우팅 구성을 이해하고 사전 로드 구성과 지연 로드 구성을 간략하게 소개합니다. 모든 사람에게 도움이 되기를 바랍니다.

Angular의 사전 로드 구성 및 지연 로드 구성에 대한 간략한 설명

NgModule은 Angular 모듈의 핵심입니다. 먼저 이야기해 보겠습니다.

1. @NgModule의 역할:

  • NgModule의 가장 근본적인 의미는 개발자가 NgModule을 사용하여 밀접하게 관련된 구성 요소를 함께 구성할 수 있도록 돕는 것입니다.
  • NgModule은 컴포넌트, 명령어, 파이프 등을 사용할 수 있는지 여부를 제어하는 ​​데 사용됩니다. 동일한 NgModule의 컴포넌트는 기본적으로 서로 표시되지만 외부 컴포넌트의 경우 NgModule에서 내보낸 내용만 볼 수 있습니다. 즉, 정의한 NgModule이 콘텐츠를 내보내지 않으면 외부 사용자는 모듈을 가져오더라도 여기에 정의된 콘텐츠를 사용할 수 없습니다.
  • NgModule은 패키징 시 사용되는 가장 작은 단위로, @NgModule과 라우팅 구성을 모두 확인하여 Webpack을 사용해 패키징합니다. Angular는 이미 웹팩을 구성했기 때문에 개발자가 훨씬 쉽게 구성할 수 있습니다. 그렇지 않으면 개발자가 직접 환경을 구성해야 합니다.
  • NgModule은 Router가 비동기적으로 로드할 수 있는 가장 작은 단위입니다. 물론 모듈에는 하나의 구성 요소만 배치할 수 있으며 많은 구성 요소 라이브러리가 이를 수행합니다. [관련 튜토리얼 추천: "angular tutorial"]

2. @NgModule 구조 설명:

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

3. 지연 로딩 설명

(1) RouterModule code> 객체는 라우팅 정보를 구성하기 위해 <code>forRoot()forChild()라는 두 가지 정적 메서드를 제공합니다. RouterModule对象提供了两个静态的方法:forRoot()forChild()来配置路由信息。

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

(2)懒加载:loadChildren

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

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

(3)预加载

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

Angular提供了两种加载策略,

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

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

forRoot()//메인 모듈에서 주요 라우팅 정보 정의

forChild()``//기능 모듈(하위 모듈)에 적용

(2) 지연 로딩: loadChildren

여기서 AppModule에 해당 모듈이 추가되지 않았지만 loadChildren 속성은 Angular에게 loadChildren을 기반으로 라우팅하도록 지시하는 데 사용됩니다. code code> 속성으로 구성된 경로는 해당 모듈을 로드하는 데 사용됩니다. 이는 모듈 지연 로딩 기능의 특정 응용 프로그램입니다. 사용자가 /xxx/** 경로에 액세스하면 해당 모듈이 로드되어 응용 프로그램이 시작될 때 로드되는 리소스의 크기가 줄어듭니다. loadChildren의 속성 값은 세 부분으로 구성됩니다.

가져온 모듈의 상대 경로

# 구분 기호 내보낸 모듈 클래스 이름

(3) 사전 로드

    지연 로딩의 경우 , 라우팅을 처음으로 모듈을 로드할 때 응답이 지연되는 경우가 있습니다. 이때 사전 로딩 전략을 사용하여 이 문제를 해결할 수 있습니다.
  • Angular는

  • PreloadAllModules-미리 로드

    NoPreloading-미리 로드 없음(기본값)이라는 두 가지 로딩 전략을 제공합니다.
  • RouterModule.forRoo()두 번째 매개변수는 구성 옵션 중 하나가 preloadingStrategy 구성입니다. 미리 로드된 정책 구성입니다.

    //使用默认预加载-预加载全部模块
    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 { }
  • 그러나 우리는 모듈의 사전 로드를 직접 제어하는 ​​것을 선호합니다. 이 경우 사전 로드 전략을 사용자 정의해야 합니다
  • A. 5초 후에 모든 모듈을 사용자 정의합니다.

  • 동일한 수준에서 새 사용자 정의를 생성합니다. 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());
        }
    }

    app.modules.ts의 공급자에

    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. 사용자 정의 - 모듈 사전 로드 지정
  • 새 selected-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. 하위 경로 생성 단계(생성 지침 없음, 직접 수동)
      • (1) 새 메인 폴더 만들기
    • 메인 디렉토리
      • main.comComponent.html
      • main.comComponent.scss
    • main.comComponent.ts
      • main.module.ts
    • main-routing.module.ts
      • main.service .ts
    • 디렉터리 A
    A.comComponent.html

A.comComponent.scss

🎜🎜A.comComponent.ts🎜🎜 🎜🎜디렉토리 B🎜🎜🎜 🎜 B.comComponent.html🎜🎜🎜🎜 🎜🎜B.comComponent.scss🎜🎜🎜🎜🎜🎜B.comComponent.ts🎜🎜🎜🎜🎜🎜🎜 🎜🎜예를 들어, 위의 main.comComponent.html에는 다음과 같은 내용이 있습니다. 하위 뷰를 배치하기 위한 영역(아이디어에 대해 먼저 이야기하겠습니다.) 그런 다음 키 코드를 입력하고 나머지에 대해서는 자세히 설명하지 않습니다.)🎜
<div>下面的区域是另一个路由出口</div>
<router-outlet></router-outlet><!--此处依照下面的路由配置,默认显示AComponent组件的内容-->
🎜(1) 메인 폴더 아래에서 라우팅을 구성합니다. Routing.module.ts. 각 구성 요소의 구성 요소(라우팅을 위해 구성해야 하는 구성 요소)를 참조해야 합니다🎜
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 掘金社区에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Python vs. JavaScript : 학습 곡선 및 사용 편의성Python vs. JavaScript : 학습 곡선 및 사용 편의성Apr 16, 2025 am 12:12 AM

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

Python vs. JavaScript : 커뮤니티, 라이브러리 및 리소스Python vs. JavaScript : 커뮤니티, 라이브러리 및 리소스Apr 15, 2025 am 12:16 AM

Python과 JavaScript는 커뮤니티, 라이브러리 및 리소스 측면에서 고유 한 장점과 단점이 있습니다. 1) Python 커뮤니티는 친절하고 초보자에게 적합하지만 프론트 엔드 개발 리소스는 JavaScript만큼 풍부하지 않습니다. 2) Python은 데이터 과학 및 기계 학습 라이브러리에서 강력하며 JavaScript는 프론트 엔드 개발 라이브러리 및 프레임 워크에서 더 좋습니다. 3) 둘 다 풍부한 학습 리소스를 가지고 있지만 Python은 공식 문서로 시작하는 데 적합하지만 JavaScript는 MDNWebDocs에서 더 좋습니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

C/C에서 JavaScript까지 : 모든 것이 어떻게 작동하는지C/C에서 JavaScript까지 : 모든 것이 어떻게 작동하는지Apr 14, 2025 am 12:05 AM

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

JavaScript 엔진 : 구현 비교JavaScript 엔진 : 구현 비교Apr 13, 2025 am 12:05 AM

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

브라우저 너머 : 실제 세계의 JavaScript브라우저 너머 : 실제 세계의 JavaScriptApr 12, 2025 am 12:06 AM

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

Next.js (백엔드 통합)로 멀티 테넌트 SAAS 애플리케이션 구축Next.js (백엔드 통합)로 멀티 테넌트 SAAS 애플리케이션 구축Apr 11, 2025 am 08:23 AM

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

Next.js (Frontend Integration)를 사용하여 멀티 테넌트 SaaS 응용 프로그램을 구축하는 방법Next.js (Frontend Integration)를 사용하여 멀티 테넌트 SaaS 응용 프로그램을 구축하는 방법Apr 11, 2025 am 08:22 AM

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

JavaScript : 웹 언어의 다양성 탐색JavaScript : 웹 언어의 다양성 탐색Apr 11, 2025 am 12:01 AM

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

See all articles

핫 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기