Angular: резолверы

Resolvers (резолверы) относятся к функционалу роутов и представляю собой разновидность сервисов, которые позволяют перед тем как открывать страницу загрузить нужные элементы. Также они позволяют вынести логику из компонента по обращению к сервису для получения данных из сервера, так как эту работу берет на себя резорвер, а потом отдает данные через роут.

1. Создадим резолвер:

1) Создаем класс и имплементриуемся от интерфейса Resolve, который импортируем из angular/router. В качестве дженерика передаем интерфейс (в примере ниже <Post>), с которым работает сервис, из которого мы и выносим логику эту.

2) Внутри класса мы реализовываем метод resolve, который принимает 2 параметра (всегда одни и те же), и возвращает что-то одно из трех: Observeble<Post> | Promise<Post> | Post.

3) Инджектируем (подключаем) в данный наш резолвер необходимый сервис (можна и другую сущность). В данном примере это PostService. Для этого также добавляем декоратор @Injectable() и прямо внего провайдим сервис в скобках, либо делаем это в модуле.

4) Теперь нам доступен сервис и мы можем с ним взаимодействовать. Так в примере ниже мы вызываем метод из него postService.getById и передаем id. Т.е. это та логика, которая раньше была в компоненте.

app/post.resolver.ts

Резолвер Ангуляра

Подключаются резолверы после создания в файле с роутами:

2. Подключаем резолвер в файле с ротуами

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

Подключаем резолвер в Ангуляре

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

3. Получаем данные с сервера в компоненте через роут

Заменяем логику в компоненте – теперь обращаемся не к сервису за запросом, а получаем данные с роута.

post.component.ts

Получение данных с резолвера в компоненте

Из преимуществ здесь то, что пока резолвер не отработает, страница не откроется.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *