如何解决亚延迟加载模块中的解析器服务上的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 {}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。