2016-12-14 88 views
4

我是A2的新手,所以这个问题可能以前曾被问过,但是我使用了错误的术语,所以找不到答案。Angular2 - NgModule外部的组件注入

但是,我想了解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

在早期版本的Angular中,它的功能与您期待的一样(即每个组件定义了它自己的依赖关系)。 在RC发布的时候,A2团队决定改变它。

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

基本上,Angular团队决定允许您将您的应用程序分割为不同的模块,从而所有组件&指令 依赖关系在模块级别定义。如果您真的担心初始负载过大,请将事件分解为不同的模块。

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