Что такое маршрутизация?
Маршрутизация – это процесс выбора маршрута в любой сети. Компьютерная сеть состоит из множества компьютеров, называемых узлами, и маршрутов или связей, соединяющих эти узлы. Связь между двумя узлами во взаимосвязанной сети может осуществляться по разным маршрутами. Маршрутизация – это процесс выбора наилучшего маршрута с использованием некоторых заранее установленных правил.
Почему маршрутизация важна?
Маршрутизация повышает эффективность сетевой коммуникации. Сбои сетевой связи приводят к длительному ожиданию загрузки страниц веб-сайта для пользователей. Это также может привести к сбою серверов веб-сайтов из-за того, что они не могут обслуживать большое количество пользователей. Маршрутизация помогает минимизировать сбои сети, управляя трафиком данных, чтобы сеть могла использовать как можно больше своей пропускной способности без перегрузки.
Что такое маршрутизатор?
Маршрутизатор – это сетевое устройство, которое соединяет вычислительные устройства и сети с другими сетями. Маршрутизаторы в основном выполняют три основные функции.
Маршрутизатор определяет путь данных при перемещении из источника в место назначения. Он пытается найти наилучший путь, анализируя сетевые метрики, такие как задержка, пропускная способность и скорость.
Пересылка данных
Маршрутизатор пересылает данные следующему устройству по выбранному пути, чтобы в конечном итоге доставить их в место назначения. Устройство и маршрутизатор могут находиться в одной или в разных сетях.
Балансировка нагрузки
Иногда маршрутизатор может отправлять копии одного и того же пакета данных по нескольким разным путям. Это позволяет уменьшить количество ошибок из-за потери данных, создать избыточность и управлять объемом трафика.
Как работает маршрутизация?
Данные перемещаются по любой сети в виде пакетов данных. Каждый пакет данных имеет заголовок, содержащий информацию о предполагаемом адресате пакета. По мере доставки пакета к месту назначения несколько маршрутизаторов могут перенаправить его несколько раз. Маршрутизаторы выполняют этот процесс миллионы раз в секунду с миллионами пакетов.
Когда приходит пакет данных, маршрутизатор сначала ищет свой адрес в таблице маршрутизации. Это похоже на то, как пассажир просматривает расписание автобусов, чтобы найти лучший автобусный маршрут до места назначения. Затем маршрутизатор пересылает или перемещает пакет в следующую точку сети.
Например, когда вы посещаете веб-сайт с компьютера в офисной сети, пакеты данных сначала отправляются на маршрутизатор офисной сети. Маршрутизатор ищет пакет заголовка и определяет место назначения пакета. Затем он просматривает свою внутреннюю таблицу и пересылает пакет – следующему маршрутизатору или другому устройству, например принтеру – внутри самой сети.
Какие виды маршрутизации существуют?
Существует два разных типа маршрутизации, которые зависят от того, как маршрутизатор создает свои таблицы маршрутизации:
Статическая маршрутизация
При статической маршрутизации сетевой администратор использует статические таблицы для ручной настройки и выбора сетевых маршрутов. Статическая маршрутизация полезна в ситуациях, когда ожидается, что структура или параметры сети останутся неизменными.
Статический характер этого метода маршрутизации сопряжен с ожидаемыми недостатками, такими как перегрузка сети. Хотя администраторы могут настраивать резервные пути на случай сбоя канала, статическая маршрутизация обычно снижает адаптивность и гибкость сетей, что приводит к снижению производительности сети.
Динамическая маршрутизация
При динамической маршрутизации маршрутизаторы создают и обновляют таблицы маршрутизации во время выполнения на основе реальных условий сети. Они пытаются найти самый быстрый путь от источника до места назначения с помощью протокола динамической маршрутизации, который представляет собой набор правил, создающих, поддерживающих и обновляющих динамическую таблицу маршрутизации.
Самое большое преимущество динамической маршрутизации заключается в том, что она адаптируется к меняющимся условиям сети, включая объем трафика, пропускную способность и сбои сети.
Каковы основные протоколы маршрутизации?
Протокол маршрутизации – это набор правил, определяющих, как маршрутизаторы идентифицируют и пересылают пакеты по сетевому пути. Протоколы маршрутизации сгруппированы в две отдельные категории: протоколы внутренних шлюзов и протоколы внешних шлюзов.
Протоколы внутренних шлюзов лучше всего работают в автономной системе – сети, административно управляемой одной организацией. Протоколы внешних шлюзов лучше управляют передачей информации между двумя автономными системами.
Протоколы внутренних шлюзов
Эти протоколы оценивают автономную систему и принимают решения о маршрутизации на основе различных метрик, например следующих:
- количество переходов или количество маршрутизаторов между источником и адресатом;
- задержка или время, затрачиваемое на отправку данных из источника в пункт назначения;
- пропускная способность канала между источником и адресатом.
Ниже приведены примеры протоколов внутренних шлюзов.
Протокол информации о маршрутизации
Протокол информации о маршрутизации (RIP) использует количество переходов для определения кратчайшего пути между сетями. RIP – это устаревший протокол, который сегодня никто не использует, потому что он плохо масштабируется для реализации более крупной сети.
Протокол Open Shortest Path First (Сначала кратчайший путь)
Протокол Open Shortest Path First (Сначала кратчайший путь, OSPF) собирает информацию от всех других маршрутизаторов автономной системы для определения кратчайшего и самого быстрого маршрута к месту назначения пакета данных. Реализовать OSPF можно с помощью различных алгоритмов маршрутизации или компьютерных процессов.
Протоколы внешних шлюзов
Протокол пограничного шлюза (BGP) является единственным протоколом внешнего шлюза.
Протокол пограничного шлюза
BGP определяет коммуникацию через Интернет. Интернет – это большая коллекция автономных систем, соединенных вместе. Каждая автономная система имеет свой номер (ASN), который она получает, зарегистрировавшись в Управлении по присвоению номеров Интернета.
BGP работает, отслеживая ближайшие ASN и сопоставляя адреса назначения с соответствующими ASN.
Что такое алгоритмы маршрутизации?
Алгоритмы маршрутизации – это программы, реализующие разные протоколы маршрутизации. Они работают, присваивая каждому каналу номер стоимости; номер стоимости рассчитывается с использованием различных сетевых метрик. Каждый маршрутизатор пытается переслать пакет данных на следующий лучший канал с наименьшими затратами.
Ниже приведены некоторые примеры алгоритмов.
Маршрутизация вектора расстояния
Алгоритм маршрутизации вектора расстояния требует, чтобы все маршрутизаторы периодически обновляли друг друга, уведомляя о наилучшей найденной информации о пути. Каждый маршрутизатор отправляет информацию о текущей оценке общей стоимости всем известным адресам.
В конце концов, каждый маршрутизатор в сети обнаруживает наилучшую информацию о пути для всех возможных пунктов назначения.
Маршрутизация состояния канала
При маршрутизации состояния канала каждый маршрутизатор обнаруживает все остальные маршрутизаторы в сети. Используя эту информацию, маршрутизатор создает карту всей сети, а затем вычисляет кратчайший путь для любого пакета данных.
Как развивалась маршрутизация?
Маршрутизация эволюционировала в соответствии с требованиями достижений сетевых технологий. Маршрутизация – это уже не просто переключение пакетов данных между автономными системами и Интернетом.
Теперь у нас есть облачная инфраструктура с вычислительными ресурсами и оборудованием, размещенными сторонними поставщиками облачных услуг. Эти облачные ресурсы подключены виртуально для создания виртуальной сети ресурсов, которые компании могут использовать для размещения и запуска приложений. Многие организации теперь имеют гибридные сети, состоящие как из локальных сетей с внутренним оборудованием, так и из облачных сетей. Маршрутизаторы должны направлять трафик между этими внутренними сетями, Интернетом и облаком.
Что такое облачная маршрутизация?
Облачная маршрутизация динамически управляет подключениями между двумя виртуальными облачными сетями или между облачной и локальной сетями с помощью протокола пограничного шлюза (BGP). Облачная маршрутизация автоматически адаптируется к меняющимся условиям сети в облаке. Облачный маршрутизатор – программное обеспечение, виртуализирующее функции маршрутизатора – упрощает маршрутизацию в облаке.
Что такое DNS-маршрутизация?
DNS (система доменных имен) преобразует доменные имена, удобные для человеческого восприятия (например, www.amazon.com), в IP-адреса, понимаемые машиной (например, 192.0.2.44). Данные, которые сопоставляют эту информацию об имени с информацией о компьютере, хранятся отдельно на DNS-серверах. Перед отправкой данных на какой-либо веб-сайт маршрутизаторы должны связаться с DNS-сервером, чтобы определить точный адрес машины для пакетов данных.
Связь с DNS-сервером может стать проблемой, особенно когда многие пользователи хотят посетить веб-сайт одновременно. Маршрутизация DNS относится к различным стратегиям и алгоритмам маршрутизации, которые управляют связью с DNS-сервером. Различные стратегии, такие как маршрутизация на основе задержек и маршрутизация на основе географического местоположения, помогают управлять коммуникационной нагрузкой DNS-сервера.
Как AWS может помочь с маршрутизацией?
Транспортный шлюз AWS выступает в роли облачного маршрутизатора и соединяет VPC и локальные сети через центральный хаб. По мере роста вашей сети сложность управления дополнительными подключениями будет возрастать. При создании глобальных приложений можно подключать несколько транспортных шлюзов AWS с помощью межрегионального пиринга.
Amazon Route 53 – это высокодоступный и масштабируемый облачный веб-сервис DNS. Это надежный и экономичный способ для предприятий и разработчиков направлять своих конечных пользователей к интернет-приложениям. Поток трафика Amazon Route 53 позволяет легко управлять трафиком по всему миру с помощью различных типов маршрутизации для создания отказоустойчивых архитектур с низкой задержкой.
Виртуальное частное облако Amazon (Amazon VPC) предоставляет логически изолированную виртуальную сеть для ресурсов AWS. Таблицы маршрутов Amazon VPC можно использовать для определения того, как ресурсы, на которых работает VPC, могут получать доступ к ресурсам, запущенным в других облаках VPC, локально или через Интернет, или взаимодействовать с ними. Таблицы маршрутизации VPC можно использовать в сочетании с группами безопасности и политиками AWS Identity and Access Management (IAM) для детального управления подключением VPC к другим ресурсам в вашей среде.
Создайте аккаунт AWS и начните работу с облачной маршрутизацией уже сегодня.
Маршрутизация — JS: HTTP Server
В веб-разработке, процесс, который отвечает за определение обработчика для конкретной запрашиваемой страницы, называется маршрутизация. Чаще говорят «роутинг». Посмотрим на пример:
Каждый адрес из примера выше представляет собой конкретный маршрут (роут). Причём их можно разделить по типу: статические и динамические.
Статические маршруты
Характеризуются тем, что адрес совпадает с самим маршрутом. Например, account/profile/edit . Несмотря на то, что адрес один, у разных пользователей он будет отображать разные данные, зависящие от того, кто сейчас авторизован.
Динамические маршруты
А что, если у нас есть адреса, которые обозначают одно и тоже, но содержат параметр. Типичный пример /users/5 . Без особого труда можно понять, что по этой ссылке мы получим информацию о пользователе с номером 5 . Но тогда возникает вопрос: если у нас в базе тысячи пользователей, нам придётся определять тысячи маршрутов?
К счастью, нет, здесь нам на помощь приходят регулярные выражения. Создаётся один маршрут, который выглядит примерно так: ^/users/(\w+) . А дальше нужно просто сопоставить это регулярное выражение со строкой запроса. Другими словами, мы определили один единственный маршрут, который покрывает подобные ссылки:
После этого момента становится понятно, что процесс роутинга – это чуть сложнее, чем просто большой if/switch . В будущем мы начнём работать с фреймворками, в которых роутинг является одной из основных подсистем. Это справедливо для всех web-фреймворков на всех языках.
Как правило, фреймворки предоставляют более высокоуровневый способ работы с роутами. То есть, вы пишете не сырые регулярные выражения, а строки с плейсхолдерами: /users/:id . Эти строки внутри заменяются на регулярные выражения и сопоставляются с запрашиваемыми адресами. Плейсхолдеры, в подавляющем большинстве фреймворков, заменяются на группу \w+ . Эта группа не включает в себя / и требует обязательного наличия хотя бы одного символа. Это значит, что следующие маршруты не подходят под маршрут /users/:id :
В нашем сервере мы реализовали следующий способ работы роутера. Отдельно описывается объект, содержащий правила роутинга (как ключи) и обработчики маршрутов (как значения):
const router = 'GET': '/': (req, res, matches) => /* . */ >, '/search.json': (req, res, matches) => /* . */ >, >, >
Обратите внимание на важную деталь. Метод http тоже является частью роутинга. Для GET — и POST -запросов на /users будет использоваться два роута. Это связано с большим количеством причин, одной из которых является семантика http . А вот параметры запроса (например, /users?name=Tirion ) не являются частью процесса маршрутизации (при таком роутинге, как выше). Они уже используются внутри обработчиков на ваше усмотрение.
Также имеет значение порядок, в котором заданы маршруты. Поэтому первыми должны идти статические и наиболее конкретизированные маршруты, а в конце более общие. Это правило справедливо в том случае, если есть пересечения.
Ещё остаётся работа с ошибками, такими как «страница не найдена». Здесь уже возможны варианты. Некоторые фреймворки обрабатывают эту ситуацию отдельно, проверяя, что ни один маршрут не совпал с запрошенным адресом, и выполняя специальный обработчик для этой ситуации. В других достаточно определить в самом конце маршрут * , в который попадет всё, что не попало в другие места. И из обработчика этого роута можно делать всё, что нужно для правильного отображения ошибки.
Пример простого способа обрабатывать маршруты:
export default http.createServer((request, response) => // извлекаем из адреса часть без query params const url = new URL(request.url, `http://$request.headers.host>`); const pathname > = url; const routes = router[request.method]; // Обходим маршруты с помощью find, // чтобы остановиться после того, как маршрут найден const result = Object.keys(routes).find((str) => const regexp = new RegExp(`^$str>$`); // Проверяем совпадение с маршрутом (записанным в виде регулярного выражения) const matches = pathname.match(regexp); // Маршрут не найден, двигаемся дальше if (!matches) return false; > // Выполнение обработчика routes[str](request, response, matches); return true; >); // Особая обработка ситуации когда не было найдено соответствующего маршрута if (!result) response.writeHead(404); response.end(); > >);
Соглашения
В web-разработке существует понятие CRUD (в русскоязычной среде говорят «круд»), которое расшифровывается как CREATE , READ , UPDATE , DELETE . И самое простое и базовое, что делают разработчики — это круды. Например, любой административный интерфейс (админка сайта) — это большой набор разных крудов для всевозможных сущностей: круд постов в блог, круд товаров и так далее.
Существуют соглашения о том, как грамотно делать круды с точки зрения маршрутизации. Они включают в себя особенности семантики http .
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Русский править
Корень: -маршрут-; интерфикс: -из-; суффикс: -ациj; окончание: -я [Тихонов, 1996] .
Произношение править
- МФА: [ mərʂrʊtʲɪˈzat͡sɨɪ̯ə ]
Семантические свойства править
Значение править
- ж.-д. организация отправления грузов маршрутными поездами ◆ Отсутствует пример употребления (см. рекомендации ).
- информ. определения маршрута следования информации в сетях связи ◆ Отсутствует пример употребления (см. рекомендации ).
Синонимы править
Антонимы править
Гиперонимы править
Гипонимы править
Родственные слова править
Ближайшее родство |
Маршрутизация¶
В Angular маршрутизация представляет собой переход от одного представления (шаблона) к другому в зависимости от заданного URL. Причем навигация может осуществляться и внутри представления.
Навигация в Angular приложениях происходит без перезагрузки страницы.
Ключевая роль в формировании URL принадлежит тегу , указывающему путь к приложению относительно расположения файла index.html . Если index.html располагается в директории клиентского приложения, то тег должен быть записан следующим образом.
base href="/" />
Если бы клиентское приложение находилось в директории example , а index.html на одном уровне иерархии с ней, то было бы так:
base href="/example" />
За организацию маршрутизации в Angular отвечает модуль RouterModule библиотеки @angular/router .
URL организуются в специальные модули и определяются для каждого отдельного модуля приложения.
Рассмотрим создание модуля AppRoutingModule .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
const routes: Routes = [ path: 'login', component: LoginRouteComponent >, path: 'home', component: HomeRouteComponent, children: [ path: 'profile', component: ProfileRouteComponent, >, ], >, path: 'contacts', redirectTo: '/home', pathMatch: 'full', children: [ path: 'director', component: DirectorContactsRouteComponent, >, ], >, path: '**', component: LoginRouteComponent >, ]; @NgModule( imports: [RouterModule.forRoot(routes)], exports: [RouterModule], >) export class AppRoutingModule <>
При определении маршрута можно указать ряд свойств:
- path — наименование маршрута;
- component — компонент для отображения при переходе на URL, совпадающий с path ;
- children — одно из дополнительных свойств, объединяющее в себе группу маршрутов относительно текущего;
- data — дополнительные данные, например, значение хлебных крошек;
- redirectTo — перенаправляет на указанный URL при попадании на маршрут, указанный в path ;
- pathMatch — используется совместно с redirectTo .
Обратите внимание, что компоненты-маршруты должны быть импортированы в модуль Angular маршрутизации.
Родительский маршрут не обязательно должен определять свойство component, он может просто объединять в себе логически связанные маршруты. Например, в примере выше contacts — родитель для страниц с контактами.
Разберем подробно назначение свойства pathMatch . У нас имеется маршрут contacts , прямой переход на который вызвал бы ошибку, если бы не было определено свойство redirectTo , поскольку для contacts не определен компонент.
Теперь представим, что redirectTo указан, а pathMatch — нет. Переход по маршруту /contacts/director отобразит компонент, указанный в redirectTo для contacts . Это происходит потому что при навигации на дочерний маршрут, Router проходит по дереву иерархии все его родительские URL и при попадании на /contacts сработает редирект.
Чтобы избежать этого в Angular routing указывается свойство pathMatch со значением full . И тогда перенаправление сработает только когда точно будет запрошен URL /contacts .
Для обработки несуществующих маршрутов необходимо использовать path со значением ** (означает любой маршрут). Таким образом, если запрошенный URL не найдет соответствий в определенной конфигурации, то маршрутизатор отобразит компонент, указанный для ** .
В Angular маршрутизации важен порядок определения URL. При запросе маршрутизатор ищет первый подходящий маршрут в порядке их определения. Поэтому обработка любого URL всегда должна определяться в самом конце.
Определение маршрутов далее передается в качестве аргумента методу forRoot() модуля RouterModule .
Метод forRoot() используется только при определении набора URL корневого модуля. Для остальных (дочерних) модулей используется метод forChild().
Далее AppRoutingModule импортируется в модуль, для которого создается навигация.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@NgModule( imports: [ AppRoutingModule ], declarations: [ AppComponent, LoginRouteComponent, HomeRouteComponent, ProfileRouteComponent, DirectorContactsRouteComponent ], providers: [], bootstrap: [AppComponent], exports: [] >)
Компоненты, на которые указывает Angular routing, подгружаются в место, где указана директива .
Для маршрутов, находящихся на самом верхнем уровне иерархии ( LoginRouteComponent и HomeRouteComponent ), родительским служит компонент, указанный в поле bootstrap .
1 2 3 4 5 6 7 8 9
div class="wrapper"> app-nav>app-nav> main> router-outlet>router-outlet> main> app-footer>app-footer> div>
Для перехода на дочерний маршрут (child route) необходимо указать полный путь к нему начиная с самого верхнего родителя.
То есть, чтобы увидеть ProfileRouteComponent , нужно в адресную строку браузера ввести /home/profile . При этом HomeRouteComponent должен содержать директиву , поскольку последующая навигация происходит только внутри него самого.
1 2 3 4
div class="profile"> h1>Home Pageh1> router-outlet>router-outlet> div>
Структура Angular routing определена, но как теперь перейти на описанные URL из шаблона? В AppComponent используется компонент AppNavComponent , в котором и определено меню приложения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
ul> li> a routerLink="/home" routerLinkActive="active-link" >Homea > li> li> a routerLink="/home/profile" routerLinkActive="active-link" >Profilea > li> li> a routerLink="/contacts/director" routerLinkActive="active-link" >Director contactsa > li> ul>
Для перехода по заданным URL используется директива routerLink , которая может быть указана не только у тега , но и у любого другого блочного HTML элемента.
Совместно с routerLink используется директива routerLinkActive . Она принимает название класса, который будет добавлен элементу (у которого указаны директивы) при активном URL, на который они ссылаются.
Как видно, все ссылки указываются от корня приложения (начинаются с / ). Но в Angular routing также возможно использование относительных ссылок.
Предположим, в HomeRouteComponent должна содержаться ссылка на компонент ProfileComponent . Поскольку URL для HomeComponent (home) является родительским по отношению к URL ProfileRouteComponent (profile). Ссылка может быть указана так:
1 2 3 4 5
li> a routerLink="profile" routerLinkActive="active-link" >Profilea > li>
Указание относительных ссылок позволяет избежать переписывания всех ссылок дочерних компонентов при изменении родительской.
Любое Angular приложение, реализующее внутри себя навигацию, имеет единственный экземпляр сервиса Router , который хранит полную конфигурацию маршрутов и реализует API для работы с навигацией.
Наиболее часто используемым методом сервиса Router является navigate() . В качестве первого параметра он принимает массив, где задается URL, а в качестве второго — объект с дополнительными параметрами запрашиваемого маршрута:
1 2 3 4
this.router.navigate(['profile', 3], queryParams: id: 3 >, fragment: 'address', >);
Маршруты с параметрами¶
Часто возникает необходимость отображения данных в зависимости от какого-то параметра, например, id . Эти параметры обычно передаются через URL.
Модернизируем маршрут profile , который должен отображать данные профиля по запрашиваемому id . Также укажем хлебные крошки через свойство data .
1 2 3 4 5 6 7 8 9
path: 'home', component: HomeComponent, children: [ path: 'profile/:id', component: ProfileComponent, data: breadcrumbs: 'Profile info'> >] >
Получить значение параметра и свойства data позволяет сервис ActivatedRoute . В его экземпляре, определенном для компонента-маршрута, содержится полная информация.
1 2 3 4 5 6 7 8 9 10
@Component( selector: 'app-profile', templateUrl: './profile.component.html', styleUrls: ['./profile.component.scss'], >) export class ProfileComponent constructor(private route: ActivatedRoute) console.log(this.route); > >
В консоль будет выведена полная информация о текущем URL. Необходимые свойства:
- url — наименование маршрута;
- params — параметры Angular маршрутизации и их значения, указываемые при определении маршрута, например, id в /profile/:id ;
- queryParams — параметры строки запроса, например, id в /profile?id=3 ;
- fragment — значение hash , например, address в /profile#address ;
- data — объект одноименного свойства, указываемого при определении маршрута.
В шаблоне параметры маршрутизации передаются следующим образом: в качестве значения директивы указывается массив, первое значение которого URL, второе — значение параметра данного URL.
a [routerLink]="['profile', 3]">Profilea>
Параметры строки запроса и hash имеют следующую запись:
1 2 3
a [routerLink]="['profile']" [queryParams]="id: 3>" >Profilea >
1 2 3
a [routerLink]="['profile']" [fragment]="address" >Profilea >
Множественная маршрутизация (named outlets)¶
В Angular различают основные и второстепенные маршруты. В пределах одного компонента может быть только один основной маршрут и сколько угодно второстепенных.
Реализуется это с помощью директивы . Основной URL соответствует стандартной записи директивы, второстепенный — записи директивы с атрибутом name.
Основные и второстепенные URL полностью независимы друг от друга. Для создания второстепенного маршрута при его определении нужно указать значения атрибута name директивы в свойстве outlet .
Добавим в приложение второстепенный маршрут discount-info , который будет отображать информацию о скидках.
Обновим определение Angular routing.
path: 'discount-info', component: DiscountInfoComponent, outlet: 'discount'>
Обновим файл app.component.html .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
div class="wrapper"> app-nav>app-nav> main> div class="row"> div class="col-9"> router-outlet>router-outlet> div> div class="col-3"> router-outlet name="discount" >router-outlet> div> div> main> app-footer>app-footer> div>
Теперь в приложении в правой колонке будет отображаться информация о скидках. Чтобы отобразить/скрыть значение второстепенного маршрута, можно выполнить следующее:
1 2 3 4 5 6 7
a [routerLink]="[outlets: discount: null>>]" >Hide discounta > a [routerLink]="[outlets: discount: 'discount-info'>>]" >Show discounta >
Или из контроллера:
1 2 3 4 5
this.router.navigate([ outlets: discount: null > >]); this.router.navigate([ outlets: discount: 'discount-info' > >, ]);
При отображении/скрытии обратите внимание на значение адресной строки браузера. В конце URL должна появляться/исчезать приписка.
. (discount:discount-info)