Назад в блог

Использование параметров запроса с Angular Router

Использование параметров запроса с Angular Router

Введение

При создании приложений могут возникнуть сценарии, когда нам нужно передать некоторые аргументы или параметры для описания поведения маршрута. В Angular, они называются query-параметрами, и они необязательны. Query-параметры не следует путать с обычными route-параметрами, которые являются обязательными и привязаны только к одному маршруту.

Чтобы прояснить разницу между параметрами маршрута (route parameters) и параметрами запроса (query parameters), представьте, что вы создаете приложение для хранения товаров. У вас может быть маршрут, который открывает любой конкретный товар с помощью product_id. Вы также можете указать query-параметр: read_only. Когда read_only имеет значение true, пользователь может только просматривать запись, тогда как если read_only имеет значение false, пользователь также может редактировать запись. Таким образом, используя всего один маршрут, можно обрабатывать сценарии как редактирования, так и просмотра. Здесь product_id — это параметр маршрута, а read_only, который является необязательным, — это query -параметр.

Предварительные требования

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

Передача query-параметров с помощью Router.navigate

Если вы используете Router.navigate для перехода по маршрутам, используйте queryParams для отправки query-параметров.

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

При использовании этого кода URL-адрес примет следующий вид:

Однако могут возникнуть сценарии, когда при переходе нам нужно передать несколько параметров. Например, если мы хотим упорядочить товары по популярности, а также по цене, мы можем использовать код ниже:

На этот раз URL-адрес примет следующий вид:

На этом мы заканчиваем рассмотрение того, как задавать query-параметры с помощью queryParams.

Предотвращение потери query-параметров с помощью queryParamsHandling

При переходе между маршрутами параметры имеют тенденцию теряться. Предположим, если мы передадим аргумент arg0, он не будет передан при последующей маршрутизации. Мы можем сохранить параметры, используя queryParamsHandling и установив значение в preserve или merge.

В приведенном выше примере предположим, что мы хотим перенаправить посетителей на страницу brands со страницы product с параметром маршрута { order: 'popular' }, сохраняя при этом параметры маршрута. Для этого мы можем использовать queryParamsHandling и установить его в preserve :

Это приведет к тому, что URL-адрес будет выглядеть следующим образом:

Далее, допустим, мы хотим сохранить query-параметр предыдущего маршрута { order: 'popular' }  при добавлении новых параметров { price: 'high-to-low' }. Мы можем установить queryParamsHandling в merge:

С приведенным выше кодом URL-адрес станет:

На этом мы завершаем тему сохранения параметров запроса с использованием queryParamsHandling для сохранения или объединения.

Передача параметров запроса с помощью RouterLink

Принимая во внимание нашу предыдущую ссылку, если мы хотим использовать RouterLink директиву для навигации, нам нужно будет передать параметры запроса с помощью queryParams как показано ниже:

Обратите внимание, как мы передаем объект в queryParams с помощью односторонней привязки. Мы также можем передать весь объект в качестве queryParams .

Кроме того, если мы хотим перенести эти параметры запроса на последующую навигацию, мы можем использовать параметр queryParamsHandling. Возможными значениями queryParamsHandling являются merge  и preserve:

Здесь мы увидели, как передавать queryParams и обрабатывать параметры с помощью queryParamsHandling в RouterLink.

Чтение значений параметров запроса

До сих пор мы учились передавать параметры запроса в маршруте. Эти параметры были необязательными и использовались для передачи некоторой информации на целевую страницу. Отправка параметров — это одна часть, но также необходимо прочитать параметры из URL-адреса и использовать их.

В Angular мы читаем параметры запроса маршрута с помощью класса ActivatedRoute. Класс ActivatedRoute имеет observable-свойство под названием queryParams для получения параметров текущего URL-адреса.

Предположим, мы имеем дело со следующим URL-адресом:

Чтобы получить доступ к параметру запроса order в коде, мы используем следующий код:

Здесь в консоли мы увидим значение параметра запроса orderpopular выведен на экран. Если у нас есть несколько параметров запроса, мы можем использовать queryParamMap свойство, которое возвращает observable-объект paramsMap объект.

Если у нас есть URL-адрес с несколькими параметрами запроса, например:

Мы можем получить доступ к этим параметрам запроса, используя следующий код:

Используя оператор расширения объекта (spread operator) здесь, мы получаем следующий результат:

Наконец, вы должны понимать, как получить доступ к параметрам запроса из результирующих маршрутов.

Заключение

В этом руководстве мы рассмотрели разницу между параметрами запроса и параметрами маршрута. Мы также изучили, как передавать аргументы между маршрутами в качестве параметров запроса, а также получать их обратно на странице с помощью queryParams и queryParamsHandling с Router.navigate и RouterLink. Мы также узнали, как обрабатывать queryParams и queryParamMap с ActivatedRoute.

Angular в своей основе требует JavaScript. Если вы хотите расширить свои знания о JavaScript, вы можете ознакомиться со следующими статьями:

Приятного программирования!

author

Shreyas Patil

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.