使用路由器时,所有教程都显示我仍然需要定义传递给根模块的bootstrap
函数的根组件。但是,如果此根组件模板只包含<router-outlet>
,那么此根组件的用途是什么?有没有办法没有它?也许只为router-outlet
指定bootstrap
组件/指令?
答案 0 :(得分:4)
我认为没有RootComponent是可能的,因为它已被用作你已经说过的bootstrap入口点:
@NgModule({
declarations: [ RootComponent, PageNotFoundComponent ],
imports: [
BrowserModule,
HttpModule,
RouterModule.forRoot([ ... ]),
],
bootstrap: [ RootComponent ]
})
RootComponent实际上用于很多事情,它也可能
当应用程序增长时,你会看到它的重点。
最后还有一个理由 - 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应用程序。
在菜单,页眉,页脚等静态部件中也很常见,并且只有部分应用程序被路由器更改, 或者有多个路由器插座来定义路由器应该添加组件的位置。