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