Когда мы запускаем приложение Angular и обслуживаем его по номеру порта, скажем (4200), мы запускаем наше приложение по адресу http: // localhost: 4200
Это единственный путь, который понимает наш браузер, и поэтому он не может обслуживать разные места назначения по разным путям, например http: // localhost: 4200 / items. Но что, если у нас есть несколько путей в одном приложении?
Как решить эту проблему?
Что ж, давай обманем :). Что, если мы сможем сообщить нашему браузеру все пункты назначения и все пути для их достижения изначально? Проблема будет решена, потому что теперь браузер все знает изначально.
Вот тут-то и вступает в действие Маршрутизатор Javascript. Это облегчает нашу жизнь, меняя пункт назначения всякий раз, когда меняется путь. С технической точки зрения, путем изменения состояния приложения при каждом изменении URL-адреса браузера и наоборот.
Эти маршрутизаторы написаны на определенных платформах Javascript Framework, а для Angular они упакованы как @angular/router
@angular/router
содержит показанные термины:
- Служба: это глобальная служба, присутствующая в приложении Angular.
- Состояние: состояние маршрутизатора поддерживается состоянием маршрутизатора.
- Конфигурация: он хранит информацию обо всех состояниях маршрутизации, присутствующих в приложении.
- Guard: это код, который запускается всякий раз, когда маршрутизатор активируется, деактивируется или загружается.
- Снимок: он предоставит доступ к состоянию и данным для определенного узла маршрута.
- Resolver: скрипт, который будет получать данные перед запуском запрашиваемой страницы.
- Розетка: это место в модели DOM для розетки маршрутизатора, в которой размещаются его компоненты.
Не беспокойтесь об этих сложных терминах, мы рассмотрим их кодом :)
Время кодирования
Чтобы указать пути и места назначения вашему браузеру, вам необходимо импортировать RouterModule
и Routes
из @angular/router
в ваш app.module.ts
файл.
import {RouterModule, Routes} from '@angular/router';
После этого вы можете определить массив ваших путей и целевых страниц.
const routes: Routes = [
{
path: '',
redirectTo: 'items',
pathMatch: 'full'
},
{
path: 'items',
component: AppComponent
}
];
Примечание. Здесь pathMatch указывает строгое соответствие пути для достижения целевой страницы.
Наконец, вам нужно передать массив маршрутов в RouterModule
с помощью RouterModule.forRoot(routes)
и добавить его в imports
RouterModule.forRoot(routes)
Полный файл app.module.ts
будет выглядеть так:
Объяснение:
В массиве routes
объектом path
является ''
, что означает путь http://localhost:4200/
, мы не указали место назначения для этого объекта, но мы перенаправляем этот путь на items
путь с помощью ключа redirectTo
.
Теперь каждый запрос на http://localhost:4200/
будет перенаправляться на http://localhost:4200/items
. В следующем объекте мы указали место назначения для пути от items
к AppComponent
с помощью ключа component
, что означает, что при каждом запросе http://localhost:4200/items
AppComponent будет выполнять рендеринг.
Технологический процесс:
Request on http://localhost:4200/
Redirected to http://localhost:4200/items
AppComponent will get Render
Отлично…. :) Наша конфигурация маршрутизации настроена, но нам нужно указать приложению Angular, где разместить наш визуализированный компонент приложения.
Для этого мы будем использовать router-outlet
.
Поскольку наше приложение загружает AppComponent
при первой загрузке. Лучшим вариантом будет передача кода AppComponent дочернему компоненту и размещение только router-outlet
внутри AppComponent
.
Итак, давайте создадим дочерний компонент, названный здесь ListComponent
, с помощью команды:
ng generate component list
А затем мы перенесем весь код в ListComponent
из AppComponent
Наконец, мы напишем <router-outlet></router-outlet>
в app.component.html
. Это обеспечит размещение здесь DOM компонента.
Наконец, вы увидите результат на экране, как показано ниже. Это дочерний компонент, который отображается внутри своего родителя, когда путь совпадает с маршрутизатором.
Полный код можно найти в репозитории.
Надеюсь, этот пост действительно поможет вам легко добавлять маршруты в ваше приложение Angular. В следующей части мы увидим концепцию Nested Routing
.
А пока, до свидания: p
Если вам понравилась статья, пожалуйста, хлопните в ладоши. Совет. Вы можете хлопать 50 раз!
Пожалуйста, поделитесь также в Fb и Twitter. Если вы хотите получать обновления, подписывайтесь на меня в Twitter и Medium. Если что-то неясно или вы хотите что-то указать, прокомментируйте ниже.