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