Умм ... Распространенным заблуждением в Angular является то, что импорт модуля в родительский модуль (т.е. в вашем примере, AppModule) создает иерархию модулей. Следовательно, люди предполагают, что дочерние модули AppModule (т.е. HomeModule) должны также наследовать импортированные модули родительского модуля.
Однако это не так. Модули не наследуют доступ к модулям, объявленным в родительских модулях. Представьте модуль как коробку. Коробка будет содержать только то, что вы положили в нее.
Теперь, если у вас есть 3 коробки, коробка A, коробка M и коробка H. Если вы не поместили коробку M внутри коробки H, почему в коробке H содержатся вещи, которые принадлежат коробке M?
Точно так же, если вы поместили коробку M и коробку H в коробку A. Теперь коробка A наверняка будет содержать все вещи как в коробке M, так и в коробке H, не так ли?
Теперь переключите термин «блок» на модуль, а A на AppModule, M на MaterialModule и H на HomeModule. Имеет ли это смысл сейчас?
Чтобы еще раз подчеркнуть это в приложениях Angular, именно поэтому при создании нового модуля CommonModule автоматически импортируется в новый модуль. CommonModule - это «меньшая» версия BrowserModule, содержащая директивы NgIf, NgFor и т. Д., Которые обычно используются в компонентах. Потому что в новом модуле BrowserModule НЕ наследуется автоматически - ngIf, ngFor и т. Д. Не будут работать. Вы можете проверить это, удалив CommonModule и посмотреть, можете ли вы использовать ngFor, ngIf и т. Д.
Вы можете легко это исправить, создав SharedModule для импорта всех сторонних модулей lib. То есть, импортируя MaterialModule, а затем экспортируя его.
Все ваши (загруженные лениво) функциональные модули должны будут импортировать один единственный SharedModule вместо повторения всех импортов для сторонних модулей.
НапримерSharedModule
@NgModule({
imports:[
CommonModule, FormsModule, ReactiveFormsModule, MaterialModule,
//... {other modules that will be shared between modules} ...,
],
exports:[
CommonModule, FormsModule, ReactiveFormsModule, MaterialModule,
//... {other modules that will be shared between modules} ...,
]
})