我有一个模块,可以导出组件以将其公开给其他模块,我想在作为另一个模块的子模块的模块中使用此组件,我要在父模块中导入第一个模块,以允许在子模块内部使用。我并不完全相信这是最好的方法。
这是我要使用的组件在根文件夹中的共享模块:
app / shared / shared.module.ts
import {dtComponent} from './dt.component';
@NgModule({
imports: [
CommonModule
],
exports: [
dtComponent
],
declarations: [
dtComponent
]
})
export class DatePModule{ }
我在应用程序文件夹中有另一个模块,可以像这样导入DatePModule:
app / contacts / contacts.module.ts
import {DatePModule} from '../shared/shared.module.ts';
@NgModule({
imports: [
CommonModule,
DatePModule
]
})
export class CTModule{ }
我需要使用dtComponent直接的一些组件CTModule,还需要在在的子模块等组件此组件CTModule。
我能做到这一点再次导入DatePModule的子模块内CTModule,但我不相信这是最好的办法。
应用/联系人/其他/other.module.ts
import {DatePModule} from '../../shared/shared.module.ts';
@NgModule({
imports: [
CommonModule,
DatePModule
]
})
export class OtherModule{ }
我的问题是,如果已经在父模块中导入了,为什么还要再次导入DatePModule?如果我在OtherModule中删除此导入,则组件dtComponent无法识别为模块的一部分。
为什么我需要再次导入DatePModule如果已经在父模块中导入
彼此导入的模块之间没有层次结构。将所有模块与所有组件合并到一个模块定义工厂中。如果您使用延迟加载,则仍然适用。延迟加载的模块和共享模块将合并,并且它们之间将没有层次结构。
要了解更多信息,请阅读避免与Angular中的模块混淆。这是报价:
关于
imports
模块的最大困惑是,开发人员认为它构成了层次结构。假设导入其他模块的模块成为其导入的父模块可能是合理的。但是,事实并非如此。所有模块在编译阶段都会合并。因此,非延迟加载的模块不会创建任何层次结构。
但是,模块imports/exports
可以在编译期间强制执行可声明类型的封装。如果要使用其他模块中的可声明类型,则必须显式导入此模块或其他重新导出所需模块的模块。解析模板时,编译器控制封装,显式导入提供了上下文,以了解某些组件可以用作模板中的子代。
我可以再次将DatePModule导入CTModule的子模块内部,但是我不认为这是最好的方法。
如果要从DatePModule
内部使用可声明的类型,那是正确的方法OtherModule
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句