Angular2 - NgModule之外的组件注入

时间:2016-12-14 01:05:20

标签: javascript angular typescript

我是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定义了构建的组件,而不是它们在运行时显示的时间和方式?

1 个答案:

答案 0 :(得分:1)

在Angular的早期版本中,它以您期望的方式运行(即每个组件定义它自己的依赖项)。 在RC发布的时候,A2团队决定改变它。

正如Estus所说,你可以使用延迟加载。有一个很好的参考指南here,展示了如何做到这一点。 (向下滚动到'延迟加载主页模块'部分。)

基本上Angular团队决定允许您将您的应用程序划分为不同的模块,其中所有组件和组件都是指示 依赖关系是在模块级别定义的。如果你真的担心初始负载过多,那么就要解决问题 进入不同的模块。

同样在回答您的问题时,是的,通过在app.module.ts中的声明数组中定义组件,然后您将加载它们。 (因为你必须在文件中导入它们以便首先引用它们。)