如何在bootstrap动态提供路由?

时间:2016-09-20 07:57:59

标签: angular2-routing

如何为RouterModule提供服务,以便我可以根据某些参数动态注入路由?

请注意,此参数也是动态的(它来自引导前的api调用)。

我确实意识到通过使用RouterModule.forRoot(这是一个静态函数),我对注入服务非常有限。

2 个答案:

答案 0 :(得分:3)

您需要为ROUTES令牌提供一个生成路由配置并获取该参数的函数。此外,您需要提供该参数。

import {ROUTES} from '@angular/router/src/router_config_loader';
[...]
imports: [RouterModule.forRoot([])] // Empty on purpose
providers: [
  SomeParamForTheFunction,
  {provide: ROUTES, 
   multi: true, 
   useFactory: routesFunction, 
   deps: [SomeParamForTheFunction]},
]

您如何提供该参数取决于您。你可以使用另一家工厂。

更新:由于路由配置现在是动态的,因此您还必须提供entryComponents属性以及初始页面加载所需的所有组件。

答案 1 :(得分:1)

为了动态提供entryComponents,您可以对提供的@Ruben代码进行以下修改:

import {ROUTES} from '@angular/router/src/router_config_loader';
import {ANALYZE_FOR_ENTRY_COMPONENTS} from '@angular/core';
[...]
imports: [RouterModule.forRoot([])] // Empty on purpose
providers: [
  SomeParamForTheFunction,
  {provide: ROUTES, 
    multi: true, 
    useFactory: routesFunction, 
    deps: [SomeParamForTheFunction]
  },
  {
    provide: ANALYZE_FOR_ENTRY_COMPONENTS,
    useValue: routes, // just write the original routes
    multi: true
  }
]

这样,如果他们在模块entryComponents宣布了declarations,则您不需要声明// notification icon builder.setSmallIcon(R.drawable.ic_notification); //you can use custom icon Bitmap largeIcon = createMyCustomIconWithNumber(); builder.setLargeIcon(largeIcon);