Структура приложения¶
Разберем, что представляет собой архитектура 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 посвящена отдельная глава, где все подробно расписано и показано на примерах.