AsyncPipe¶
Одним из встроенных классов, который в отличие от других pipes уже по умолчанию представляет тип impure. AsyncPipe позволяет получить результат асинхронной операции.
AsyncPipe отслеживает объекты Observable и Promise и возвращает полученное из этих объектов значение. При получении значения AsyncPipe сигнализирует компоненту о том, что надо проверить изменения. Если компонент уничтожается, то AsyncPipe автоматически отписывается от объектов Observable и Promise, что предотвращает возможные утечки памяти.
Используем AsyncPipe:
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 32 33 | |
Здесь с периодичностью в 500 миллисекунд в шаблон компонента передается очередной элемент из массива phones.
Компонент не должен подписываться на асинхронное получение данных, обрабатывать их, а при уничтожении отписываться от получения данных. Всю эту работу делает AsyncPipe.
Поскольку AsyncPipe позволяет легко извлекать данные из результата асинхронных операций, то его очень удобно применять, например, при загрузке данных из сети. Для примера определим следующий проект:
В файле http.service.ts определим сервис, который получает данные с сервера:
1 2 3 4 5 6 7 8 9 10 11 | |
Для хранения данных в корневой папке проекта определим файл users.json:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
В файле app.component.ts использует сервис:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Опять же загрузка данных запускается в методе ngOnInit(). В шаблоне компонента к полученным данным применяется AsyncPipe:
1 | |
И когда данные будут получены, то они сразу будут отображены на веб-странице:
Ну чтобы загрузка данных из сети сработала, надо добавить в AppModule модуль HttpClientModule:
1 2 3 4 5 6 7 8 9 10 11 | |


