如何为RouterModule提供服务,以便我可以根据某些参数动态注入路由?
请注意,此参数也是动态的(它来自引导前的api调用)。
我确实意识到通过使用RouterModule.forRoot(这是一个静态函数),我对注入服务非常有限。
答案 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);
。