Часто задаваемые вопросы по NgModule
В этом руководстве мы постараемся ответить на большинство часто задаваемых вопросов о NgModules.
Какие классы я должен добавить в массив объявлений?
Добавьте декларируемые классы-компоненты, директивы и каналы в список объявлений.
Объявите эти классы ровно в одном модуле приложения. Объявите их в модуле, если они принадлежат этому конкретному модулю.
Что декларируется?
Объявление - это типы классов - компоненты, директивы и каналы, которые вы можете добавить в список объявлений модуля. Это единственные классы, которые вы можете добавить в объявления.
Какие классы не следует добавлять в объявления?
Добавляйте только декларируемые классы в список объявлений NgModule.
Не объявляйте следующее:
- Класс, который уже объявлен в другом модуле, будь то модуль приложения, @NgModule или сторонний модуль.
- Массив директив, импортированных из другого модуля. Например, не объявляйте FORMS_DIRECTIVES из @ angular / forms, потому что FormsModule уже объявляет его.
- Модульные занятия.
- Классы обслуживания.
- Неангулярные классы и объекты, такие как строки, числа, функции, модели сущностей, конфигурации, бизнес-логика и вспомогательные классы.
Зачем указывать один и тот же компонент в нескольких свойствах NgModule?
AppComponent часто указывается как в объявлениях, так и в начальной загрузке. Вы можете увидеть тот же компонент, который указан в декларациях, экспорте и entryComponents.
Хотя это кажется избыточным, эти свойства имеют разные функции. Членство в одном списке не подразумевает членство в другом списке.
AppComponent может быть объявлен в этом модуле, но не загружен.
AppComponent может быть загружен в этом модуле, но объявлен в другом функциональном модуле.
Компонент может быть импортирован из другого модуля приложения (поэтому вы не можете объявить его) и реэкспортироваться этим модулем.
Компонент может быть экспортирован для включения в шаблон внешнего компонента, а также динамически загружен во всплывающем диалоговом окне.
Что означает «Не удается связать с« x », поскольку это не известное свойство« y »»?
Эта ошибка часто означает, что вы не объявили директиву «x» или не импортировали модуль NgModule, к которому принадлежит «x».
Что я должен импортировать?
Импортируйте NgModules, на открытые (экспортируемые) декларируемые классы которых вы должны ссылаться в шаблонах компонентов этого модуля.
Это всегда означает импорт CommonModule из @ angular / common для доступа к директивам Angular, таким как NgIf и NgFor. Вы можете импортировать его напрямую или из другого модуля NgModule, который реэкспортирует его.
Импортируйте FormsModule из @ angular / forms, если ваши компоненты имеют [(ngModel)] выражения двустороннего связывания.
Импортируйте общие и функциональные модули, когда компоненты этого модуля включают в себя их компоненты, директивы и каналы.
Импортируйте BrowserModule только в корневой AppModule.
Должен ли я импортировать BrowserModule или CommonModule?
Модуль корневого приложения, AppModule, почти каждого приложения браузера должен импортировать BrowserModule из @ angular / platform-browser.
BrowserModule предоставляет сервисы, которые необходимы для запуска и запуска приложения браузера.
BrowserModule также реэкспортирует CommonModule из @ angular / common, что означает, что компоненты в модуле AppModule также имеют доступ к директивам Angular, которые нужны каждому приложению, например NgIf и NgFor.
Не импортируйте BrowserModule в любой другой модуль. Функциональные модули и модули с отложенной загрузкой должны импортировать CommonModule. Им нужны общие директивы. Им не нужно переустанавливать поставщиков приложений.
Импорт CommonModule также освобождает функциональные модули для использования на любой целевой платформе, а не только в браузерах.
Что я должен экспортировать?
Экспортируйте декларируемые классы, на которые компоненты в других NgModules могут ссылаться в своих шаблонах. Это ваши публичные занятия. Если вы не экспортируете декларируемый класс, он остается закрытым, видимым только для других компонентов, объявленных в этом NgModule.
Вы можете экспортировать любой декларируемый класс - компоненты, директивы и каналы - независимо от того, объявлен он в этом NgModule или в импортированном NgModule.
Вы можете реэкспортировать все импортированные модули NgModules, которые эффективно реэкспортируют все их экспортируемые классы. NgModule может даже экспортировать модуль, который он не импортирует.
Что я не должен экспортировать?
Не экспортируйте следующее:
- Частные компоненты, директивы и каналы, которые вам нужны только внутри компонентов, объявленных в этом NgModule. Если вы не хотите, чтобы другой NgModule видел его, не экспортируйте его.
- Не декларируемые объекты, такие как сервисы, функции, конфигурации и модели объектов.
- Компоненты, которые загружаются только динамически маршрутизатором или при начальной загрузке. Такие входные компоненты никогда не могут быть выбраны в шаблоне другого компонента. В то время как нет никакого вреда в их экспорте, также нет никакой выгоды.
- Чистые сервисные модули, которые не имеют публичных (экспортируемых) объявлений. Например, нет смысла реэкспортировать HttpClientModule, потому что он ничего не экспортирует. Его единственная цель - добавить провайдеров http-услуг в приложение в целом.
Предыдущий: Разделение модулей
Далее: Внедрение зависимостей в угловых
Новый контент: Composer: менеджер зависимостей для PHP , R программирования