Feature modules¶
28.02.2022
Модули функций — это NgModules, предназначенные для организации кода.
Последний пример приложения с функциональным модулем, который описывается на этой странице, приведен в живом примере.
По мере роста приложения можно организовать код, относящийся к конкретной функции. Это помогает установить четкие границы между функциями. С помощью модулей функций можно отделить код, относящийся к конкретной функциональности или функции, от остального кода. Разграничение областей приложения помогает наладить сотрудничество между разработчиками и командами, разделить директивы и управлять размером корневого модуля.
Функциональные модули и корневые модули¶
Функциональный модуль — это лучшая организационная практика, а не концепция основного API Angular. Функциональный модуль представляет собой целостный набор функциональных возможностей, ориентированных на конкретные потребности приложения, такие как рабочий процесс пользователя, маршрутизация или формы. В то время как в корневом модуле можно сделать все, что угодно, функциональные модули помогают разделить приложение на отдельные области. Функциональный модуль взаимодействует с корневым модулем и другими модулями через предоставляемые им сервисы, а также компоненты, директивы и пайпы, которые он совместно использует.
Как создать функциональный модуль¶
Предполагая, что у вас уже есть приложение, созданное с помощью Angular CLI, создайте функциональный модуль с помощью CLI, введя следующую команду в корневом каталоге проекта. Замените CustomerDashboard на название вашего модуля. Суффикс "Module" в имени можно не указывать, так как CLI добавит его:
1 | |
В результате CLI создаст папку customer-dashboard с файлом внутри customer-dashboard.module.ts со следующим содержимым:
1 2 3 4 5 6 7 8 | |
Структура NgModule одинакова независимо от того, является ли он корневым или функциональным модулем. В функциональном модуле, сгенерированном CLI, в верхней части файла находятся два оператора импорта JavaScript: первый импортирует NgModule, который, как и корневой модуль, позволяет использовать декоратор @NgModule; второй импортирует CommonModule, который вносит множество общих директив, таких как ngIf и ngFor. Модули функций импортируют CommonModule вместо BrowserModule, который импортируется только один раз в корневом модуле. CommonModule содержит информацию только для общих директив, таких как ngIf и ngFor, которые необходимы в большинстве шаблонов, в то время как BrowserModule конфигурирует приложение Angular для браузера, что необходимо сделать только один раз.
Массив declarations доступен для добавления декларируемых компонентов, директив и пайпов, которые принадлежат только данному модулю. Чтобы добавить компонент, введите в командную строку следующую команду, где customer-dashboard — каталог, в котором CLI сгенерировал функциональный модуль, а CustomerDashboard — имя компонента:
1 | |
При этом создается папка для нового компонента в папке customer-dashboard и обновляется функциональный модуль с информацией CustomerDashboardComponent:
1 2 3 4 5 6 7 8 9 10 11 | |
Компонент CustomerDashboardComponent теперь находится в списке импорта JavaScript в верхней части и добавлен в массив declarations, что дает Angular знать, что нужно связать этот новый компонент с данным функциональным модулем.
Импорт функционального модуля¶
Чтобы включить функциональный модуль в свое приложение, необходимо сообщить о нем корневому модулю app.module.ts. Обратите внимание на экспорт CustomerDashboardModule в нижней части customer-dashboard.module.ts. Это раскрывает его, чтобы другие модули могли обращаться к нему. Чтобы импортировать его в модуль AppModule, добавьте его в импорт в app.module.ts и в массив imports:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Теперь AppModule знает о функциональном модуле. Если к функциональному модулю добавить поставщиков услуг, то AppModule будет знать и о них, как и о любых других функциональных модулях. Однако по умолчанию NgModules не раскрывает свои компоненты.
Рендеринг шаблона компонента функционального модуля¶
Когда CLI сгенерировал компонент CustomerDashboardComponent для функционального модуля, он включил в него шаблон customer-dashboard.component.html со следующей разметкой:
1 | |
Чтобы увидеть этот HTML в AppComponent, необходимо сначала экспортировать CustomerDashboardComponent в CustomerDashboardModule. В файле customer-dashboard.module.ts, сразу под массивом declarations, добавьте массив exports, содержащий CustomerDashboardComponent:
1 | |
Далее в AppComponent, app.component.html, добавьте тег <app-customer-dashboard>:
1 2 3 4 | |
Теперь, помимо заголовка, который отображается по умолчанию, отображается и шаблон CustomerDashboardComponent:
Подробнее о NgModules¶
Возможно, вас также заинтересует следующее:
