我是A2的新手,所以这个问题之前可能已被问到,但我使用了错误的术语,所以无法找到答案。
但是,我试图理解A2中的@Component
注射。我可以告诉所有组件,无论嵌套如何,它们总是必须在根级别声明为NgModules文件的一部分(即,此处声明的服务可通过所有组件访问)
@NgModule({
imports: [
...
],
declarations: [
1stComponent,
2ndComponent,
3rdComponent,
4thComponent <-- All components must be included here
],
providers: [
...
],
bootstrap: [
AppComponent
]
})
对我而言,这似乎有点奇怪。如果您的ChildComponent
仅作为ParentComponent
的一部分显示,该怎么办?为什么ChildComponent
需要在NgModule
级别声明?可以在需要时将ChildComponent
声明为父组件的一部分吗?在加载应用程序时,预先声明所有组件不会导致开销 - 它需要预先准备好一切吗?或者只是NgModule
定义了构建的组件,而不是它们在运行时显示的时间和方式?
答案 0 :(得分:1)
在Angular的早期版本中,它以您期望的方式运行(即每个组件定义它自己的依赖项)。 在RC发布的时候,A2团队决定改变它。
正如Estus所说,你可以使用延迟加载。有一个很好的参考指南here,展示了如何做到这一点。 (向下滚动到'延迟加载主页模块'部分。)
基本上Angular团队决定允许您将您的应用程序划分为不同的模块,其中所有组件和组件都是指示 依赖关系是在模块级别定义的。如果你真的担心初始负载过多,那么就要解决问题 进入不同的模块。
同样在回答您的问题时,是的,通过在app.module.ts中的声明数组中定义组件,然后您将加载它们。 (因为你必须在文件中导入它们以便首先引用它们。)