我正在尝试创建一个简单的功能模块,但是导入失败,我也不知道为什么。以下是我的功能模块的重要部分
@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';
但这似乎是多余的。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
在功能模块中添加导出不是多余的。标头中的导出和NgModule装饰器中的exports属性解决了不同的目的。
NgModule装饰器中的exports属性用于Angular。 Angular为这些导出的组件创建一个模板,并在找到该选择器的任何地方传递该模板。在此过程中,功能部件和主模块之间没有打字稿文件依赖性。因此TSC不会受到困扰。
标头中的导出是针对Typescript的。每当为Typescript类(模块或组件)发出导入时,该类都应该有相应的导出。如果TSC找不到导出的类,它将抛出此错误。