Маршрутизация в Angular позволяет создавать одностраничные приложения (SPA) с навигацией между различными представлениями без полной перезагрузки страницы.
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
const routes: Routes = [
{ path: '', component: HomeComponent }, // Маршрут по умолчанию
{ path: 'about', component: AboutComponent },
{ path: 'products', loadChildren: () => import('./products/products.module').then(m => m.ProductsModule) }, // Ленивая загрузка
{ path: '**', redirectTo: '' } // Обработка 404
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
<router-outlet></router-outlet>
)<a routerLink="/about">О нас</a>
){ path: 'contact', component: ContactComponent }
{ path: 'product/:id', component: ProductDetailComponent }
Чтение параметра в компоненте:
import { ActivatedRoute } from '@angular/router';
constructor(private route: ActivatedRoute) {
this.route.params.subscribe(params => {
console.log(params['id']); // Получаем ID продукта
});
}
{
path: 'admin',
component: AdminComponent,
children: [
{ path: 'users', component: UserListComponent },
{ path: 'settings', component: SettingsComponent }
]
}
В шаблоне AdminComponent:
<h2>Admin Panel</h2>
<nav>
<a routerLink="users">Users</a>
<a routerLink="settings">Settings</a>
</nav>
<router-outlet></router-outlet> <!-- Для дочерних компонентов -->
<a routerLink="/about" routerLinkActive="active">О нас</a>
<a [routerLink]="['/product', productId]">Детали продукта</a>
import { Router } from '@angular/router';
constructor(private router: Router) {}
navigateToAbout() {
this.router.navigate(['/about']);
// Или с параметрами:
this.router.navigate(['/product', id]);
}
@Injectable({ providedIn: 'root' })
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}
canActivate(): boolean {
if (this.authService.isLoggedIn()) {
return true;
} else {
this.router.navigate(['/login']);
return false;
}
}
}
Использование в маршрутах:
{
path: 'dashboard',
component: DashboardComponent,
canActivate: [AuthGuard]
}
Оптимизация производительности за счет загрузки модулей по требованию:
{
path: 'customers',
loadChildren: () => import('./customers/customers.module').then(m => m.CustomersModule)
}
this.router.navigate(['/product', id], {
queryParams: { search: 'term' },
fragment: 'section'
});
{
path: 'special',
component: SpecialComponent,
data: { title: 'Special Page' }
}
Чтение данных в компоненте:
this.route.data.subscribe(data => {
console.log(data.title); // 'Special Page'
});
Правильная реализация маршрутизации - ключ к созданию хорошо структурированных и производительных Angular-приложений.