[Angular]MultipleModule 구성에서의 Routing

개요


  • Angular 앱에서 모듈을 분리하면 모듈 단위로 라우팅을 설정할 수 있습니다.
  • 여러 모듈을 만들면 각각 네임 스페이스를 자르고 느슨하게 결합하여 개발할 수 있습니다
  • 어떻게 설정하는지 시도한 메모입니다

  • 절차



    앱의 병아리 만들기


  • 먼저 AngularCLI에서 앱의 병아리를 만듭니다.
    ng new ng-multiple-module-routing-sample --routing=true --skip-tests=true --no-interactive=
    
  • src/app 아래 파일
  • % tree src/app
    src/app
    ├── app-routing.module.ts
    ├── app.component.css
    ├── app.component.html
    ├── app.component.ts
    ├── app.module.ts
    
  • app.component.html의 추가 코드를 지 웁니다

  • src/app/app.component.html
    <router-outlet></router-outlet>
    

    module 만들기


  • 홈 모듈 만들기
  • ng generate module --name=home --module=app --route=home --routing --no-interactive
    
  • src/app/home 할 수 있습니다
  • % tree src/app
    src/app
    ├── app-routing.module.ts
    ├── app.component.css
    ├── app.component.html
    ├── app.component.ts
    ├── app.module.ts
    └── home
        ├── home-routing.module.ts
        ├── home.component.css
        ├── home.component.html
        ├── home.component.ts
        └── home.module.ts
    
  • 이 시점에서 routing에 대한 파일은 src/app/app.routing.module.tssrc/app/home/home-routing.module.ts의 두 가지가 있습니다.
  • 먼저 app.routing.module.ts를 살펴 보겠습니다

  • src/app/app.routing.module.ts
    import { NgModule } from '@angular/core';
    import { Routes, RouterModule } from '@angular/router';
    
    const routes: Routes = [
      {
        // /home/**へのアクセスはh./home/home.moduleへ飛ばされる
        path: 'home',
        loadChildren: () => import('./home/home.module').then(m => m.HomeModule),
      },
    ];
    
    @NgModule({
      imports: [RouterModule.forRoot(routes)],
      exports: [RouterModule],
    })
    export class AppRoutingModule {}
    
  • app.routing.module.ts는 홈 모듈 라우팅을 구성합니다.
  • /home로 시작하는 URL에 액세스하면 홈 모듈에 대한 액세스로 판단되며 home.routing.module.ts의 규칙이 적용됩니다.
  • home.routing.module.ts
    src/app/home/home.routing.module.ts
    import { NgModule } from '@angular/core';
    import { Routes, RouterModule } from '@angular/router';
    
    import { HomeComponent } from './home.component';
    
    // pathの部分は/homeの後ろの値のこと。つまり''は/homeに該当する
    const routes: Routes = [{ path: '', component: HomeComponent }];
    
    @NgModule({
      imports: [RouterModule.forChild(routes)],
      exports: [RouterModule],
    })
    export class HomeRoutingModule {}
    
  • path: ''에 대한 액세스가 HomeComponent에 매핑되었습니다.
  • 이것은 /home에 액세스하면 HomeComponent가 표시된다는 것입니다.
  • 액세스하면 home worls!가 표시됩니다.



    module에 라우팅 추가


  • 홈 모듈에 페이지를 추가해보십시오.
  • about 구성 요소를 만듭니다
  • ng generate component --name=home/about --module=home --skipTests --no-interactive
    
  • src/app/home/about 할 수 있습니다
  • % tree src/app
    src/app
    ├── app-routing.module.ts
    ├── app.component.css
    ├── app.component.html
    ├── app.component.ts
    ├── app.module.ts
    └── home
        ├── about
        │   ├── about.component.css
        │   ├── about.component.html
        │   └── about.component.ts
        ├── home-routing.module.ts
        ├── home.component.css
        ├── home.component.html
        ├── home.component.ts
        └── home.module.ts
    
  • 홈 모듈의 라우팅에 about 구성 요소에 대한 매핑을 추가합니다.

    src/app/home/home.routing.module.ts
    import { NgModule } from '@angular/core';
    import { Routes, RouterModule } from '@angular/router';
    
    import { HomeComponent } from './home.component';
    import { AboutComponent } from './about/about.component';
    
    const routes: Routes = [
      { path: '', component: HomeComponent },
      // /home/aboutにアクセスするとAboutComponentが表示される
      { path: 'about', component: AboutComponent },
    ];
    
    @NgModule({
      imports: [RouterModule.forChild(routes)],
      exports: [RouterModule],
    })
    export class HomeRoutingModule {}
    
  • About 구성 요소에 라우팅 추가
  • 홈 모듈의 라우팅이므로 /home/about에 액세스하면 About 구성 요소가 표시됩니다.


  • 홈 모듈에서 다음과 같은 리디렉션을 설정하면 /home에 대한 액세스가 /home/about로 리디렉션됩니다.
    const routes: Routes = [
      { path: '', redirectTo: 'about', pathMatch: 'full' },
      { path: 'about', component: AboutComponent },
    ];
    

    주의


  • 모듈의 라우팅 설정에서 path: '/about'와 같이 /
  • 이것 때문에 잘 움직여야했습니다

  • 감상


  • 분할 된 모듈마다 네임 스페이스가 구분되어 느슨하게 결합하여 개발할 수 있습니다.
  • 규모가 커진 장면에서 살아 올 것 같네요
  • 좋은 웹페이지 즐겨찾기