Javascript 角度5+;UI路由器:当应用程序由不同的根模块导入时,急切地加载UI路由器解析服务
我正在创建一个Angular 5应用程序,其中包含一个模块,该模块将由Angular 5应用程序中较大的“根”模块导入。我无法直接访问此“根”模块 这个“根”应用程序将通过路由延迟加载所有内容,而不是急切地加载 我在应用程序中使用UI Router进行路由/状态,并使用UI Router的Javascript 角度5+;UI路由器:当应用程序由不同的根模块导入时,急切地加载UI路由器解析服务,javascript,angular,dependency-injection,angular-ui-router,Javascript,Angular,Dependency Injection,Angular Ui Router,我正在创建一个Angular 5应用程序,其中包含一个模块,该模块将由Angular 5应用程序中较大的“根”模块导入。我无法直接访问此“根”模块 这个“根”应用程序将通过路由延迟加载所有内容,而不是急切地加载 我在应用程序中使用UI Router进行路由/状态,并使用UI Router的resolve属性填充来自各种API的数据,以传递到各种组件和其他状态 当我的应用程序独立于这个“根”并且本质上是根本身时,我能够成功地在我的路由中解析。然而,现在我们作为一个更大的应用程序的一部分延迟加载,我
resolve
属性填充来自各种API的数据,以传递到各种组件和其他状态
当我的应用程序独立于这个“根”并且本质上是根本身时,我能够成功地在我的路由中解析。然而,现在我们作为一个更大的应用程序的一部分延迟加载,我收到了与我的路由依赖注入相关的注入错误
以下是我的EntryModule的当前状态:
@NgModule({
declarations: [ ... ],
imports: [
...,
UIRouterUpgradeModule
],
providers: [
...,
RoutingDataService (the service I use to for resolving data in routing)
],
entryComponents: [
EntryComponent,
...
],
exports: [ ... ]
})
export class EntryModule { }
下面是我使用该服务的一条路线的示例:
{
name: "entry.itemDetails",
url: "/engagement/:id",
component: DetailComponent,
data: { ... },
resolve: [
{
token: "selectedId",
deps: [Transition],
resolveFn: (transitionService): string => {
const transitionParams = transitionService.params();
return transitionParams.id;
}
},
{
token: "itemDetails",
deps: [RoutingDataService, Transition],
resolveFn: (dataService, transitionService) => {
const selectedId = transitionService.params().id;
return dataService.getItemDetails(selectedId);
}
},
{
token: "itemFinancialDetails",
deps: [RoutingDataService, Transition],
resolveFn: (dataService, transitionService) => {
const selectedId = transitionService.params().id;
return dataService.getItemFinancialDetails(selectedId);
}
}
]
}
在我的deps阵列中,我包括Transition(并称之为transitionService)和RoutingDataService(我称之为dataService)。我编写了RoutingDataService,专门用于我的路由。RoutingDataService还注入了许多服务,可用于一些函数中,例如getItemDetails()
尽管在我的EntryModule中包含RoutingDataService,但由于这是一个由“根”应用程序导入的模块,这是一个延迟加载的模块,因此我在尝试仅在我的路由中使用RoutingDataService时收到此错误
Error: StaticInjectorError(e)[RoutingDataService]:
StaticInjectorError(Platform: core)[RoutingDataService]:
NullInjectorError: No provider for RoutingDataService!
所以我的问题是,我如何将这个RoutingDataService直接注入到我的路由中,以便由应用程序导入的根应用程序能够急切地加载它?否则,根应用程序将延迟加载我的应用程序,而我需要注入的服务将丢失。我认为,为了实现您想要的功能,您需要创建至少一个非延迟加载的模块,并在那里提供您的服务。与非延迟加载模块的情况一样,父级和子级共享同一个注入器,如果您这样做,您的RoutingDataService将自动对您的根应用程序可用。@RajatBadjatya所以根应用程序必须急切地加载包含RoutingDataService的模块?或者在我自己的应用程序中,我必须在我自己的EntryModule中包含一个急切加载的模块,其中包括RoutingDataService?