在子模块内部使用导入模块中的组件

西格加

我有一个模块,可以导出组件以将其公开给其他模块,我想在作为另一个模块的子模块的模块中使用此组件,我要在父模块中导入第一个模块,以允许在子模块内部使用。我并不完全相信这是最好的方法。

这是我要使用的组件在根文件夹中的共享模块:

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无法识别为模块的一部分。

马克斯·科雷茨基(Max Koretskyi)

为什么我需要再次导入DatePModule如果已经在父模块中导入

彼此导入的模块之间没有层次结构将所有模块与所有组件合并到一个模块定义工厂中。如果您使用延迟加载,则仍然适用。延迟加载的模块和共享模块将合并,并且它们之间将没有层次结构。

要了解更多信息,请阅读避免与Angular中的模块混淆这是报价:

关于imports模块的最大困惑是,开发人员认为它构成了层次结构。假设导入其他模块的模块成为其导入的父模块可能是合理的。但是,事实并非如此。所有模块在编译阶段都会合并。因此,非延迟加载的模块不会创建任何层次结构。

但是,模块imports/exports可以在编译期间强制执行可声明类型的封装如果要使用其他模块中的可声明类型,则必须显式导入此模块或其他重新导出所需模块的模块。解析模板时,编译器控制封装,显式导入提供了上下文,以了解某些组件可以用作模板中的子代。

我可以再次将DatePModule导入CTModule的子模块内部,但是我不认为这是最好的方法。

如果要从DatePModule内部使用可声明的类型,那是正确的方法OtherModule

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章