Angular7 - Roteamento
O roteamento basicamente significa navegar entre as páginas. Você viu muitos sites com links que o direcionam para uma nova página. Isso pode ser obtido usando o roteamento. Aqui, as páginas às quais nos referimos serão na forma de componentes. Já vimos como criar um componente. Vamos agora criar um componente e ver como usar o roteamento com ele.
Durante a configuração do projeto, já incluímos o módulo de roteamento e o mesmo está disponível em app.module.ts conforme mostrado abaixo -
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { NewCmpComponent } from './new-cmp/new-cmp.component';
import { ChangeTextDirective } from './change-text.directive';
import { SqrtPipe } from './app.sqrt';
@NgModule({
declarations: [
SqrtPipe,
AppComponent,
NewCmpComponent,
ChangeTextDirective
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
AppRoutingModule é adicionado conforme mostrado acima e incluído na matriz de importações.
Detalhes do arquivo de app-routing.module são dados abaixo -
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
const routes: Routes = [];
@NgModule({
imports: [
RouterModule.forRoot(routes)
],
exports: [RouterModule]
})
export class AppRoutingModule { }
Aqui, temos que observar que este arquivo é gerado por padrão quando o roteamento é adicionado durante a configuração do projeto. Se não forem adicionados, os arquivos acima devem ser adicionados manualmente.
Portanto, no arquivo acima, importamos Routes e RouterModule de @ angular / router.
Há uma const routesdefinido que é do tipo Rotas. É um array que contém todas as rotas que precisamos em nosso projeto.
As rotas const são fornecidas ao RouterModule conforme mostrado em @NgModule. Para exibir os detalhes de roteamento para o usuário, precisamos adicionar a diretiva <router-outlet> onde queremos que a visualização seja exibida.
O mesmo é adicionado em app.component.html conforme mostrado abaixo−
<h1>Angular 7 Routing Demo</h1>
<router-outlet></router-outlet>
Agora vamos criar 2 componentes chamados Home e Contact Us e navegue entre eles usando o roteamento.
Página inicial do componente
Primeiro, vamos discutir sobre o Lar. A seguir está a sintaxe para Component Home -
ng g component home
C:\projectA7\angular7-app>ng g component home CREATE
src/app/home/home.component.html (23 bytes) CREATE
src/app/home/home.component.spec.ts (614 bytes) CREATE
src/app/home/home.component.ts (261 bytes) CREATE
src/app/home/home.component.css (0 bytes) UPDATE
src/app/app.module.ts (692 bytes)
Componente entre em contato conosco
A seguir está a sintaxe do Component Contact Us -
ng g component contactus
C:\projectA7\angular7-app>ng g component contactus
CREATE src/app/contactus/contactus.component.html (28 bytes)
CREATE src/app/contactus/contactus.component.spec.ts (649 bytes)
CREATE src/app/contactus/contactus.component.ts (281 bytes)
CREATE src/app/contactus/contactus.component.css (0 bytes)
UPDATE src/app/app.module.ts (786 bytes)
Terminamos de criar componentes para casa e entre em contato conosco. Abaixo estão os detalhes dos componentes em app.module.ts -
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { NewCmpComponent } from './new-cmp/new-cmp.component';
import { ChangeTextDirective } from './change-text.directive';
import { SqrtPipe } from './app.sqrt';
import { HomeComponent } from './home/home.component';
import { ContactusComponent } from './contactus/contactus.component';
@NgModule({
declarations: [
SqrtPipe,
AppComponent,
NewCmpComponent,
ChangeTextDirective,
HomeComponent,
ContactusComponent
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Agora vamos adicionar os detalhes das rotas em app-routing.module.ts conforme mostrado abaixo -
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { ContactusComponent } from './contactus/contactus.component';
const routes: Routes = [
{path:"home", component:HomeComponent},
{path:"contactus", component:ContactusComponent}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
A matriz de rotas possui os detalhes do componente com o caminho e o componente. O componente necessário é importado conforme mostrado acima.
Aqui, precisamos observar que os componentes de que precisamos para o roteamento são importados em app.module.ts e também em app-routing.module.ts. Vamos importá-los em um único lugar, ou seja, em app-routing.module.ts.
Portanto, criaremos um array de componentes a ser usado para roteamento e iremos exportar o array em app-routing.module.ts e novamente importá-lo em app.module.ts. Portanto, temos todos os componentes a serem usados para roteamento em app-routing.module.ts.
É assim que temos feito app-routing.module.ts -
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { ContactusComponent } from './contactus/contactus.component';
const routes: Routes = [
{path:"home", component:HomeComponent},
{path:"contactus", component:ContactusComponent}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { } export const
RoutingComponent = [HomeComponent,ContactusComponent];
A matriz de componentes, ou seja, RoutingComponent, é importado em app.module.ts da seguinte forma -
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule , RoutingComponent} from './app-routing.module';
import { AppComponent } from './app.component';
import { NewCmpComponent } from './new-cmp/new-cmp.component';
import { ChangeTextDirective } from './change-text.directive';
import { SqrtPipe } from './app.sqrt';
@NgModule({
declarations: [
SqrtPipe,
AppComponent,
NewCmpComponent,
ChangeTextDirective,
RoutingComponent
],
imports: [
BrowserModule,
AppRoutingModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Portanto, agora definimos as rotas. Precisamos exibir o mesmo para o usuário, então vamos adicionar dois botões, Home e Fale Conosco em app.component.html e, ao clicar nos respectivos botões, ele exibirá a visualização do componente dentro da diretiva <router-outlet> que nós adicionou em add.component.html.
Crie o botão dentro de app.component.html e forneça o caminho para as rotas criadas.
app.component.html
<h1>Angular 7 Routing Demo</h1>
<nav>
<a routerLink = "/home">Home</a>
<a routerLink = "/contactus">Contact Us </a>
</nav>
<router-outlet></router-outlet>
Em .html, adicionamos links âncora, Home e Contact us, e usamos routerLink para fornecer o caminho para as rotas que criamos em app-routing.module.ts.
Vamos agora testar o mesmo no navegador -
É assim que o obtemos no navegador. Vamos adicionar um estilo para fazer os links parecerem bons.
Adicionamos o seguinte css em app.component.css -
a:link, a:visited {
background-color: #848686;
color: white;
padding: 10px 25px;
text-align: center;
text-decoration: none;
display: inline-block;
}
a:hover, a:active {
background-color: #BD9696;
}
Esta é a exibição dos links no navegador -
Clique no link Home, para ver os detalhes dos componentes da casa como mostrado abaixo -
Clique em Fale Conosco para ver os detalhes de seus componentes conforme fornecido abaixo -
Ao clicar no link, você também verá o URL da página mudando na barra de endereço. Ele anexa os detalhes do caminho no final da página, conforme visto na captura de tela mostrada acima.