Angular Route

Angular Route

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

Create app with Route

ng new appname --routing

Create Routing file

example) 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 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.