导入共享Angular模块-错误模块在本地声明组件,但未导出

时间:2020-05-11 18:41:18

标签: angular

我正在尝试创建一个简单的功能模块,但是导入失败,我也不知道为什么。以下是我的功能模块的重要部分

@NgModule({
  declarations: [
    ProducerLookupComponent,
    ProducerAddComponent
  ]
  exports: [
    ProducerLookupComponent,
    ProducerAddComponent
  ]
})
export class ProducerModule { }

我在我的应用模块中导入了ProducerModule。然后,我想将ProducerLookupComponent和ProducerAddComponent用作对话框的模板,因此我不会在任何其他html模板中添加它们的选择器。这似乎与创建功能模块的基本教程不同。我创建了其他功能模块,在这些功能模块中,我可以通过其选择器使用组件。

所以在我创建对话框的ts文件中,我有这样的代码

import { ProducerLookupComponent, ProducerAddComponent} from '../producer/producer.module';

那我就知道了

ERROR in src/app/application-initiation-fio/application-initiation-fio.component.ts:8:10 - error TS2459: Module '"D:/code/ade/client/src/app/producer/producer.module"' declares 'ProducerLookupComponent' locally, but it is not exported.

请注意,我可以这样在生产者模块中添加导出语句来“修复”错误

export{ ProducerLookupComponent } from './producer-lookup/producer-lookup.component';
export{ ProducerAddComponent } from './producer-add/producer-add.component';

但这似乎是多余的。

任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:2)

在功能模块中添加导出不是多余的。标头中的导出和NgModule装饰器中的exports属性解决了不同的目的。

NgModule装饰器中的exports属性用于Angular。 Angular为这些导出的组件创建一个模板,并在找到该选择器的任何地方传递该模板。在此过程中,功能部件和主模块之间没有打字稿文件依赖性。因此TSC不会受到困扰。

标头中的导出是针对Typescript的。每当为Typescript类(模块或组件)发出导入时,该类都应该有相应的导出。如果TSC找不到导出的类,它将抛出此错误。