即使使用路由器,我是否仍需要基本组件

时间:2016-11-17 07:39:46

标签: angular

使用路由器时,所有教程都显示我仍然需要定义传递给根模块的bootstrap函数的根组件。但是,如果此根组件模板只包含<router-outlet>,那么此根组件的用途是什么?有没有办法没有它?也许只为router-outlet指定bootstrap组件/指令?

3 个答案:

答案 0 :(得分:4)

我认为没有RootComponent是可能的,因为它已被用作你已经说过的bootstrap入口点:

@NgModule({
  declarations: [ RootComponent, PageNotFoundComponent ],
  imports: [
    BrowserModule,
    HttpModule,
    RouterModule.forRoot([ ... ]),
  ],
  bootstrap: [ RootComponent ]
})

RootComponent实际上用于很多事情,它也可能

  1. 包含例如导航和页脚(静态部分)
  2. 它可以注册其他出口,例如某些模态实现中的模态出口等。
  3. 它可以注入全局服务,因为虽然服务没有被注入任何地方但它没有被初始化,因此不执行其工作。这对于工人类服务很有用,例如,听全球事件等。
  4. 当应用程序增长时,你会看到它的重点。

    最后还有一个理由 - Angular docs将其设置为每个未来项目的模板,如果你不遵循默认结构,新的开发人员可能会感到困惑。

    拥有另一个文件的实际问题是什么?

答案 1 :(得分:4)

如果您了解angular2架构,则必须知道 rootcomponent appcomponent selector < / strong> @Component decorator 中的元属性。实际上,任何 module loader eg. webpack or systemjs 都会加载包含 @NgModule decorator eg. AppModule 的文件,并会进一步加载 rootcomponent 。现在,rootcompnent有一个选择器,它与 index.html 中使用的标记匹配,并且您可以从中开始使用angular2功能。

@NgModule decorator or AppModule 文件通常启动Angular2框架并加载 rootcomponent ,您可以将其视为实现Angular2功能的入口点。因此需要 rootcomponent

路由器插座是一个功能(通常用于rootcomponent,因为从rootcomponent你应该去应用程序的任何地方或加载不同的其他视图)动态加载angular2组件(根据定义的路由)

答案 2 :(得分:3)

目的是路由器将组件添加到<router-outlet>。如果它没有找到它,则会抛出错误。

因此,没有<router-outlet>,就没有路由。

路由器也仅在Angular2应用程序引导后初始化。没有根组件的Angular2应用程序。

在菜单,页眉,页脚等静态部件中也很常见,并且只有部分应用程序被路由器更改, 或者有多个路由器插座来定义路由器应该添加组件的位置。