Angular роутинг — обработка route параметров в версии v2+

Angular роутинг — обработка route параметров в версии v2+

От автора: продолжаем изучать, как работает в Angular роутинг. Роутер Angular – очень мощный инструмент, позволяющий делать все, что связано с роутингом. С его помощью можно: обрабатывать базовый роутинг, защищать роуты с помощью guard, лениво загружать приложение, и многое другое.

Одна из наиболее стандартных задач роутера – создавать роуты с параметрами. Например, на сайте Scotch ссылки на профиль пользователя выглядят так //scotch.io/@chris. Chris – это динамический параметр роута.

2 способа получения параметров роута

Роутер позволяет вытягивать параметры роута разными способами. Обсудим оба способа и поговорим об их преимуществах и недостатках:

Снимок: роутер позволяет делать снимок текущего роута

Observable/Stream: Angular активно использует Observables, а значит, роутер возвращает Observables, который мы можем поджидать

Поговорим об этих способах более подробно немного позже.

Создание роутов с параметрами

Давайте разберем простой пример. Мы создадим роут с параметрами.

Обратите внимание: это код из AppRoutingModule, который Angular CLI создает по умолчанию при запуске команды ng new my-app –routing. Параметр создается через синтаксис двоеточия. У нашего роута есть параметр :username.

Ссылки на роуты с параметрами

Нам необходимо создать роуты на обе секции. Ниже представлено несколько способов, как можно сослаться на домашнюю страницу. В Angular роутере есть директива RouterLink. Код ниже делает то же самое.

Так как у роута нет параметров, то можно перейти к первому варианту. Второй способ можно использовать в том случае, если вы хотите использовать назначения свойств в квадратных скобках. Так легче распознать директиву Angular. Третий способ удобен, когда в роуте есть параметры.

Ссылка на страницу профиля с помощью параметров роута

Вот так можно ссылаться на профили пользователей. В сценарии ниже у нас есть переменная username в классе компонента.

Мы создали ссылки. Теперь можно перейти к получению параметров роута в UserComponent.

Получение параметров роута (снимок)

Давайте посмотрим, как с помощью снимка можно получить параметры роута. В роутере Angular есть ActivatedRoute, его можно вставить в наши классы. Это будет основной инструмент для получения параметров роута.

Базовая настройка UserComponent.

Мы вставим ActivatedRoute в этот компонент через конструктор. Далее с помощью ActivatedRoute мы вытянем username параметр роута в ngOnInit().

Для получения username больше ничего не нужно! Давайте разберем следующий способ получения параметров роута, а также узнаем, почему второй метод лучше.

Производительность роутов Angular

Angular всеми силами старается поддерживать максимальную производительность приложения. Один из способов – повторное использование компонентов по максимуму. Angular не обязательно уничтожать и создавать компоненты заново, он может просто переключаться между данными.

«Angular повторно использует компоненты для повышения производительности»

Сценарий для которого не подходит снимок – мы находимся на странице одного профиля и переходим по ссылке на другой. Снимок запускается лишь раз при инициализации компонента. При перемещении из /users/chris в /users/nick компонент не обновляется.

Если вы не будете повторно использовать один компонент, можете использовать снимок. В остальных случаях нам понадобится способ на observable.

Получение параметров роута (observable)

Observable по своей натуре представляют поток событий. То есть когда мы переходим от профиля к проофилю, вместе с новыми данными будет передаваться observable.

В роутере Angular v4+ есть ParamMap – Observable, который мы можем использовать. Синтаксис использования:

Теперь всегда при клике на новый профиль, вы увидите, как console.log() обновляет username из роута. Обратите внимание: роутер Angular сам обработает отписку от ParamMap.

Angular v2

paramMap – одно из нововведений. Если вы работаете с Angular v2, а не v4+, то получать параметры роута можно с помощью params, а не paramMap.

Всего пара дополнительных строк кода делают так, что компонент будет смотреть за изменениями роута и всегда обновлять username.

Заключение

Роутер Angular упрощает работу с параметрами роутов. Взвесьте доступные варианты и решите, какой подходит вам больше (снимок или Observable). Обычно лучше положиться на Observable, чтобы избежать проблем в будущем с повторным использованием компонента.

Автор: Chris Sevilleja

Источник: //scotch.io/

Редакция: Команда webformyself.

Метки:

Похожие статьи:

Комментарии Вконтакте: