Структура приложения¶
Разберем, что представляет собой архитектура Angular приложения.
Сам фреймворк состоит из нескольких библиотек (или модулей), каждая из которых содержит в себе определенный функционал, а каждый модуль состоит из совокупности классов и их свойств и методов.
Каждый класс имеет свое функциональное предназначение.
Не все библиотеки обязательны для использования в приложении (англ. Angular App), часть подключается по мере необходимости, например, FormsModule или HttpClientModule.
Модуль¶
Разберем модули, именно с них начинается проектирование архитектуры Angular приложения. Каждый из них имеет собственный набор структурных элементов:
component— отвечает за часть web-страницы и включает в себя HTML-шаблон, CSS-стили и логику поведения;service— поставщик данных дляcomponent;directive— преобразует определенную часть DOM заданным образом.
Все вышеперечисленное собирается в корневой модуль, который общепринято называется AppModule.
Корневой модуль может быть только один, но он может использовать функционал других модулей, объявленных в объекте декоратора @NgModule() в свойстве imports.
@NgModule() — это декоратор, который принимает описывающий модуль объект.
Перечень свойств объекта:
declarations— компоненты (Component), директивы (Directive) и фильтры (Pipe) корневого модуля;exports— компоненты, сервисы, директивы и фильтры, доступные для использования разработчикам, которые будут использовать ваш модуль в своих разработках;imports— другие модули, используемые в корневом модуле;providers— сервисы (Service) приложения;bootstrap— имя главного компонента приложения (как правило, называетсяAppComponent).
Далее рассказано, как создать полноценный функциональный модуль, который может быть использован другими разработчиками.
Компонент¶
Компонент — это часть интерфейса приложения с собственной логикой. Вся видимая часть Angular App реализуется с помощью компонентов, поэтому часто можно услышать, что архитектура Angular компонентная.
Ранее уже упоминалось, что за создание компонента отвечает декоратор @Component(). Основные свойства объекта, который принимает декоратор:
selector— название компонента;template(илиtemplateUrl) — HTML-разметка в виде строки (или путь к HTML-файлу);providers— список сервисов, поставляющих данные для компонента;styles— массив путей к CSS-файлам, содержащим стили для создаваемого компонента.
Все компоненты в совокупности и есть Angular App.
Сервис¶
Сервисы нужны для предоставления данных компонентам. Это могут быть не только запросы к серверу, но и функции, преобразующие исходные данные по заданному алгоритму. Они позволяют архитектуре Angular приложения быть более гибкой и масштабируемой.
Задача сервиса должна быть узкой и строго определенной.
Не будет считаться ошибкой, если вы реализуете функционал в компонентах, но считается хорошей практикой все обращения к серверу и функции, возвращающие данные, выносить в сервисы.
Директива¶
Предназначение директив — преобразование DOM заданным образом, наделение элемента поведением.
По своей реализации директивы практически идентичны компонентам, компонент — это директива с HTML-шаблоном, но с концептуальной точки зрения они различны.
Есть два вида директив:
- структурные — добавляют, удаляют или заменяют элементы в DOM;
- атрибуты — задают элементу другое поведение.
Они создаются с помощью декоратора @Directive() с конфигурационным объектом.
В Angular имеется множество встроенных директив (*ngFor, *ngIf), но зачастую их недостаточно для больших приложений, поэтому приходится реализовывать свои.
Каждому из блоков архитектуры Angular посвящена отдельная глава, где все подробно расписано и показано на примерах.