Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度5+;UI路由器:当应用程序由不同的根模块导入时,急切地加载UI路由器解析服务_Javascript_Angular_Dependency Injection_Angular Ui Router - Fatal编程技术网

Javascript 角度5+;UI路由器:当应用程序由不同的根模块导入时,急切地加载UI路由器解析服务

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的数据,以传递到各种组件和其他状态 当我的应用程序独立于这个“根”并且本质上是根本身时,我能够成功地在我的路由中解析。然而,现在我们作为一个更大的应用程序的一部分延迟加载,我

我正在创建一个Angular 5应用程序,其中包含一个模块,该模块将由Angular 5应用程序中较大的“根”模块导入。我无法直接访问此“根”模块

这个“根”应用程序将通过路由延迟加载所有内容,而不是急切地加载

我在应用程序中使用UI Router进行路由/状态,并使用UI Router的
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?