小编典典

Angular 2“组件”不是已知元素

all

我正在尝试在其他模块中使用我在 AppModule 中创建的组件。我收到以下错误:

“未捕获(承诺):错误:模板解析错误:

‘contacts-box’ 不是已知元素:

  1. 如果 ‘contacts-box’ 是一个 Angular 组件,那么验证它是这个模块的一部分。
  2. 如果“contacts-box”是一个 Web
    组件,则将“CUSTOM_ELEMENTS_SCHEMA”添加到该组件的“@NgModule.schemas”以禁止显示此消息。

我的项目结构很简单:
整体项目结构

我将我的页面保存在 pages
目录中,每个页面保存在不同的模块中(例如客户模块),每个模块都有多个组件(如客户列表组件、客户添加组件等)。我想在这些组件中使用我的
ContactBoxComponent(例如在客户添加组件中)。

如您所见,我在小部件目录中创建了联系人框组件,因此它基本上位于 AppModule 中。我将 ContactBoxComponent 导入添加到
app.module.ts 并将其放入 AppModule 的声明列表中。它没有用,所以我搜索了我的问题并将 ContactBoxComponent
添加到导出列表中。没有帮助。我还尝试将 ContactBoxComponent 放入 CustomersAddComponent
中,然后放入另一个(来自不同的模块),但我收到一个错误,说有多个声明。

我错过了什么?


阅读 65

收藏
2022-07-09

共1个答案

小编典典

这些是我遇到此类错误时执行的 5 个步骤。

  • 你确定名字是对的吗?(还要检查组件中定义的选择器)
  • 在模块中声明组件?
  • 如果它在另一个模块中,导出组件?
  • 如果它在另一个模块中,导入那个模块?
  • 重启cli?

在单元测试期间发生错误时,请确保您声明了组件或导入了模块TestBed.configureTestingModule

我还尝试将 ContactBoxComponent 放入 CustomersAddComponent
中,然后放入另一个(来自不同的模块),但我收到一个错误,说有多个声明。

您不能两次声明一个组件。您应该在一个新的单独模块中声明和导出您的组件。接下来,您应该在要使用组件的每个模块中导入这个新模块。

很难说什么时候应该创建新模块,什么时候不应该。我通常为我重用的每个组件创建一个新模块。当我有一些几乎在任何地方都使用的组件时,我将它们放在一个模块中。当我有一个不重复使用的组件时,我不会创建一个单独的模块,直到我在其他地方需要它。

尽管将所有组件放在一个模块中可能很诱人,但这对性能不利。在开发过程中,每次进行更改时,模块都必须重新编译。模块越大(组件越多),花费的时间就越多。对大模块进行小改动比在小模块中进行小改动需要更多时间。

2022-07-09