我是 A2 的新手,所以之前可能有人问过这个问题,但我使用了错误的术语,所以找不到答案。
但是,我试图了解 A2 中的 @Component
注入(inject)。据我所知,所有组件,无论它们如何嵌套,都必须在根级别声明为 NgModules 文件的一部分(即,此处声明的服务可通过所有组件访问)
@NgModule({
imports: [
...
],
declarations: [
1stComponent,
2ndComponent,
3rdComponent,
4thComponent <-- All components must be included here
],
providers: [
...
],
bootstrap: [
AppComponent
]
})
对我来说,这似乎有点奇怪。如果您有一个仅作为 ParentComponent
的一部分显示的 ChildComponent
怎么办?为什么 ChildComponent
需要在 NgModule
级别声明?这个 ChildComponent
是否可以在需要时不声明为父组件的一部分?在加载应用程序时预先声明所有组件不会导致开销 - 它需要预先获取所有内容吗?或者只是 NgModule
定义了构建的组件,而不是它们在运行时显示的时间或方式?
最佳答案
在 Angular 的早期版本中,它按照您期望的方式运行(即每个组件都定义了自己的依赖项)。 在 RC 发布前后,A2 团队决定对其进行更改。
正如 Estus 提到的,您可以使用延迟加载。有很好的引用指南here这说明了如何去做。 (向下滚动到“延迟加载主页模块”部分)。
基本上,Angular 团队决定允许您将应用程序分割成不同的模块,从而所有组件和指令 依赖项在模块级别定义。如果您真的担心初始负载太大,请将其分解 进入不同的模块。
同样在回答你的问题时,是的,通过在 app.module.ts 的声明数组中定义你的组件,然后你将随后加载它们。 (因为您必须首先将它们导入文件中才能引用它们)。
关于javascript - Angular2 - NgModule 之外的组件注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41133149/