Angular 2 - Roteamento

O roteamento ajuda a direcionar os usuários para páginas diferentes com base na opção que eles escolhem na página principal. Portanto, com base na opção escolhida, o componente angular necessário será renderizado para o usuário.

Vamos ver as etapas necessárias para ver como podemos implementar o roteamento em um aplicativo Angular 2.

Step 1 - Adicione a tag de referência de base no arquivo index.html.

<!DOCTYPE html>
<html>
   <head>
      <base href = "/">
      <title>Angular QuickStart</title>
      <meta charset = "UTF-8">
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">
      
      <base href = "/">
      <link rel = "stylesheet" href = "styles.css">

      <!-- Polyfill(s) for older browsers -->
      <script src = "node_modules/core-js/client/shim.min.js"></script>
      <script src = "node_modules/zone.js/dist/zone.js"></script>
      <script src = "node_modules/systemjs/dist/system.src.js"></script>
      <script src = "systemjs.config.js"></script>

      <script>
         System.import('main.js').catch(function(err){ console.error(err); });
      </script>
   </head>

   <body>
      <my-app></my-app>
   </body>
</html>

Step 2- Crie duas rotas para o aplicativo. Para isso, crie 2 arquivos chamadosInventory.component.ts e product.component.ts

Step 3 - Coloque o seguinte código no arquivo product.component.ts.

import { Component } from '@angular/core';

@Component ({
   selector: 'my-app',
   template: 'Products',
})
export   class   Appproduct  {
}

Step 4 - Coloque o seguinte código no arquivo Inventory.component.ts.

import { Component } from '@angular/core';

@Component ({
   selector: 'my-app',
   template: 'Inventory',
})
export class AppInventory  {
}

Ambos os componentes não fazem nada extravagante, eles apenas renderizam as palavras-chave com base no componente. Portanto, para o componente Inventory, ele exibirá a palavra-chave Inventory para o usuário. E para o componente de produtos, ele exibirá a palavra-chave do produto para o usuário.

Step 5 - No arquivo app.module.ts, adicione o seguinte código -

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent }  from './app.component';
import { Appproduct } from './product.component';
import { AppInventory } from './Inventory.component';
import { RouterModule, Routes } from '@angular/router';

const appRoutes: Routes = [
   { path: 'Product', component: Appproduct },
   { path: 'Inventory', component: AppInventory },
];

@NgModule ({
   imports: [ BrowserModule,
   RouterModule.forRoot(appRoutes)],
   declarations: [ AppComponent,Appproduct,AppInventory],
   bootstrap: [ AppComponent ]
})
export class AppModule { }

Os seguintes pontos precisam ser observados sobre o programa acima -

  • Os appRoutes contêm 2 rotas, uma é o componente Appproduct e a outra é o componente AppInventory.

  • Certifique-se de declarar ambos os componentes.

  • O RouterModule.forRoot garante a adição de rotas ao aplicativo.

Step 6 - No arquivo app.component.ts, adicione o seguinte código.

import { Component } from '@angular/core';

@Component ({
   selector: 'my-app',
   template: `
   <ul>
      <li><a [routerLink] = "['/Product']">Product</a></li>
      <li><a [routerLink] = "['/Inventory']">Inventory</a></li>
   </ul>
   <router-outlet></router-outlet>`
})
export class AppComponent  { }

O seguinte ponto deve ser observado sobre o programa acima -

  • <router-outlet> </router-outlet> é o espaço reservado para renderizar o componente com base na opção que o usuário escolhe.

Agora, salve todo o código e execute o aplicativo usando npm. Vá para o navegador e verá a seguinte saída.

Agora, se você clicar no link Inventário, obterá a seguinte saída.

Adicionando uma rota de erro

No Routing, também se pode adicionar uma rota de erro. Isso pode acontecer se o usuário for para uma página que não existe no aplicativo.

Vamos ver como podemos implementar isso.

Step 1 - Adicione um componente PageNotFound como NotFound.component.ts conforme mostrado abaixo -

Step 2 - Adicione o seguinte código ao novo arquivo.

import { Component } from '@angular/core';

@Component ({  
   selector: 'my-app',  
   template: 'Not Found', 
})  
export class PageNotFoundComponent {  
}

Step 3 - Adicione o seguinte código ao arquivo app.module.ts.

import { NgModule } from '@angular/core'; 
import { BrowserModule } from '@angular/platform-browser'; 
import { AppComponent } from './app.component'; 
import { Appproduct } from './product.component' 
import { AppInventory } from  './Inventory.component' 
import { PageNotFoundComponent } from  './NotFound.component' 
import { RouterModule, Routes } from '@angular/router';  

const appRoutes: Routes = [ 
   { path: 'Product', component: Appproduct }, 
   { path: 'Inventory', component: AppInventory }, 
   { path: '**', component: PageNotFoundComponent } 
];  

@NgModule ({ 
   imports: [ BrowserModule, 
   RouterModule.forRoot(appRoutes)], 
   declarations: [ AppComponent,Appproduct,AppInventory,PageNotFoundComponent], 
   bootstrap: [ AppComponent ] 
}) 

export class AppModule {
}

O seguinte ponto deve ser observado sobre o programa acima -

  • Agora temos uma rota extra chamada caminho: '**', componente: PageNotFoundComponent. Portanto, ** é para qualquer rota que não se enquadre na rota padrão. Eles serão direcionados para o componente PageNotFoundComponent.

Agora, salve todo o código e execute o aplicativo usando npm. Vá para o seu navegador e você verá o seguinte resultado. Agora, quando você acessar qualquer link errado, obterá a seguinte saída.