亚延迟加载模块中的解析器服务上的Angular 9 NullInjectorError

问题描述

我有一个Angular 9应用。它具有一个延迟加载模块,而该模块又具有一个子延迟加载模块。 SubSubModule有自己的SubSubRoutingModule。仅在SubSubThingRouteResolver中需要一个SubSubRoutingModule,而正是这个路由守卫与NullInjectorErrors在一起有点时间。

我将解析器导入到路由模块中,同时还将其添加到“ providers”数组中(见下文)。

我的解析器被标记为@Injectable()(没有providerIn),它实现了resolve,并且此路由模块被导入到SubSubModule中。该应用程序的构建没有问题。

当我尝试访问路由时,在浏览器控制台中收到以下错误(请注意,发生错误的模块不是路由模块,而是延迟加载的模块)。 错误错误:未捕获(承诺):

NullInjectorError:R3InjectorError(SubSubModule)[SubSubThingResolver_Factory-> SubSubThingResolver_Factory-> SubSubThingResolver_Factory-> SubSubThingResolver_Factory-> SubSubThingResolver_Factory]: NullInjectorError:SubSubThingResolver_Factory没有提供程序!

最后一个奇怪的事情是,VS Code在我的Resolver类上不断弹出“快速修复灯泡”,并提示将类移至新文件。当我尝试该操作时,它将创建一个新文件(标题大小写而不是驼峰大小写),并删除所有点(.ts除外)。我已经尝试过了,但是并不能解决问题。

没有解析器,一切正常。

是否存在一些我不知道的奇怪规则,无法在延迟加载的模块中声明解析器?我要导入错误吗?这是我的第一个包含延迟加载的模块和解析器的项目。

import { SubSubThingRouteResolver } from "file";

const routes: Routes = [
    {
        path: "",children: [
            {
                path: "whatever",component: WhateverComponent,resolve: SubSubThingRouteResolver
            }
        ]
    }
]

@NgModule({
    imports: [RouterModule.forChild(routes)],providers: [SubSubThingRouteResolver]
})
export class SubSubRoutingModule {}

解决方法

尝试在根注入器上注册SubSubThingResolver解析器:

@Injectable({providedIn: 'root'})
,

您应该导出将解析器与RouterModule一起使用的exports: [RouterModule]

import { SubSubThingRouteResolver } from "file";

const routes: Routes = [
    {
        path: "",children: [
            {
                path: "whatever",component: WhateverComponent,resolve: SubSubThingRouteResolver
            }
        ]
    }
]

@NgModule({
    imports: [RouterModule.forChild(routes)],exports: [RouterModule],providers: [SubSubThingRouteResolver]
})
export class SubSubRoutingModule {}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...