19

我有一个名为 GoComponent 的共享组件,我想在 2 个模块中使用它:FindPageModule 和 AddPageModule。

当我在“FindPageModule”的声明和“AddPageModule”中添加它时,我收到一个错误:

find:21 错误:(SystemJS)类型 GoComponent 是 2 个模块声明的一部分:FindPageModule 和 AddPageModule!请考虑将 GoComponent 移至导入 FindPageModule 和 AddPageModule 的更高模块。您还可以创建一个新的 NgModule,它导出并包含 GoComponent,然后在 FindPageModule 和 AddPageModule 中导入该 NgModule。

因此,我将其从它们中取出并将其添加到 AppModule 声明中,该声明确实导入了 FindPageModule 和 AddPageModule,并且在 FindPageModule 的声明中并使用“GoComponent”的名为“FindFormComponent”的组件中出现错误:

zone.js:355 Unhandled Promise rejection: Template parse errors:
'go' is not a known element:
1. If 'go' is an Angular component, then verify that it is part of this module.
2. If 'go' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. (" style="height:64px;">
            <div style="position: relative; display: inline-block; width: 100%;">
                [ERROR ->]<go></go>
            </div>
        </div>
"): FindFormComponent@101:4 ; Zone: <root> ; Task: Promise.then ; Value: Error: Template parse errors:(…) Error: Template parse errors:
'go' is not a known element:
1. If 'go' is an Angular component, then verify that it is part of this module.
2. If 'go' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. (" style="height:64px;">
            <div style="position: relative; display: inline-block; width: 100%;">
                [ERROR ->]<go></go>
            </div>
        </div>
"): FindFormComponent@101:4

如何让 FindPageModule 中声明的 FindFormComponent 等组件使用 GoComponent,同时让 AddPageModule 声明的组件使用 GoComponent?

4

2 回答 2

47

是的,组件只能在一个模块中声明,并且它们的访问权限也不会以任何方式继承,这意味着在主应用程序模块中声明它不会让您在任何其他模块中访问它。

如果你有一个组件被其他模块使用,通常他们的方法是将它放在一个共享模块中

在共享模块中包含组件:

@NgModule({
  declarations: [ SharedComponent ],
  exports: [ SharedComponent ]
})
export class SharedModule {}

如何在别处使用共享模块:

@NgModule({
  imports: [ SharedModule ]
})
class ModuleWithComponentThatUsesSharedComponent {}

也可以看看

于 2016-10-08T00:44:30.517 回答
1

如果你想跨多个模块使用 GoComponent,你应该创建一个“共享”模块并将 GoComponent 添加到共享模块的导出中。然后将共享模块导入到要使用此组件的其他模块中。

在此处了解更多信息

希望这有帮助!

于 2016-10-08T00:43:08.067 回答