Angular Route

Angular Route

Routing is one of big topic for Single Page Application. Other framework also supports Routing.

Create app with Route

When we create app, use following option. To do this, routing file, module are automatically prepared

ng new appname --routing

Or set up everything by ourselves.

Create Routing file

app.module.ts

import { ModuleWithProviders } from '@angular/core';
import { RouterModule } from '@angular/router';
 
import { MainComponent } from './main.component';
import { ParamComponent } from './param.component';
import { ContentComponent } from './content.component';
import { NotfoundComponent } from './notfound.component';
import { ChildpageComponent } from './childpage.component';
import { DataComponent } from './data.component';
 
const Routes = [
  { path: '', component: MainComponent },
  { path: 'main', component: MainComponent },
  { path: 'param', component: ParamComponent },
  { path: 'data', component: DataComponent, data: { category: 'Angular'} },
  { path: 'contents/:id', component: ContentComponent,
    children: [
      { path: 'pages/:page', component: ChildpageComponent }
    ]},
  { path: 'top', redirectTo: 'main', pathMatch: 'full' },
  { path: '**', component: NotfoundComponent }
];
 
export const APP_ROUTES: ModuleWithProviders = RouterModule.forRoot(Routes);

In this case, we can support following URLs.

localhost:4200
localhost:4200/main
localhost:4200/param
localhost:4200/data
localhost:4200/contents/1
localhost:4200/contents/1/pages/2
localhost:4200/top

The last ** is exception. If the user access others (not above url), redirect to NotfoundComponent

Import Routing into module file

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
 
import { AppComponent } from './app.component';
import { MainComponent } from './main.component';
import { ParamComponent } from './param.component';
import { NotfoundComponent } from './notfound.component';
import { ContentComponent } from './content.component';
import { ChildpageComponent } from './childpage.component';
import { DataComponent } from './data.component';
 
import { APP_ROUTES } from './app.routing';
 
@NgModule({
  imports: [ BrowserModule, APP_ROUTES ],
  declarations: [ MainComponent,
    ParamComponent,
    NotfoundComponent,
    ContentComponent,
    ChildpageComponent,
    DataComponent,
    AppComponent ],
  bootstrap: [ AppComponent ]
})
export class AppModule {}

App Root

app.component.ts

import { Component } from '@angular/core';
import { Router } from '@angular/router';
 
@Component({
  selector: 'app-root',
  template: `
    <router-outlet></router-outlet>
  `
})
export class AppComponent {
  constructor(private router: Router) {}
}

router-outlet is key for routing. This indicates using routing into app.

コメント