【问题标题】:Importing Shared Angular Module - Error Module declares component locally, but is not exported导入共享 Angular 模块 - 错误模块在本地声明组件,但未导出
【发布时间】:2020-08-27 10:05:56
【问题描述】:

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

@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';

但这似乎是多余的。

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

【问题讨论】:

  • 你查看过这个答案stackoverflow.com/a/60740893/10310278
  • 是的。不过好像不是同一个问题。反正不完全一样。
  • 你把你的对话框组件作为入口组件了吗?

标签: angular


【解决方案1】:

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

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

标头中的导出用于 Typescript。 每当为 Typescript 类(模块或组件)发出导入时,该类应该有相应的导出。如果 TSC 找不到导出的类,就会抛出这个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多