【发布时间】:2020-09-29 09:20:26
【问题描述】:
我有一个已发布的库,其中包含一个在其模板中使用 [routerLink] 的组件。在我的应用程序中安装库后,我收到错误 NullInjectorError: R3InjectorError(AppModule)[Router -> Router -> Router]: NullInjectorError:没有路由器的提供者!
在库中的模块中,RouterModule 被导入,如下所示:
@NgModule({
declarations: [
Component
],
exports: [
Component
],
imports: [
CommonModule,
RouterModule,
TranslateModule
]
})
export class LibWithComponentModule {
}
在我的应用程序中,RouterModule 配置如下:
const routes: Routes = [{
path: '',
component: RootComponent
}];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
app.module.ts 看起来像这样:
declarations: [
AppComponent,
RootComponent
],
imports: [
BrowserModule,
AppRoutingModule,
LibWithComponentModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
但我认为RouterModule 会被提供?我做错了什么?
【问题讨论】:
-
可以把路由文件
LibWithComponentModule的代码贴出来吗? -
没有路由文件,我只是在 LibWithComponent 中使用 [routerLink] 指令。
-
对于一个库,如果它打算被导入到现有的应用程序中,通常情况下,你不应该导入浏览器模块,而是使用通用模块。还应使用 forchild 导入 Routermodule。 Forroot 仅适用于根模块。
-
在这种情况下,我只需要路由器模块提供的模板指令,不多也不少,所以我根本不使用 forChild。会不会是这个问题?
-
不,使用 forChild 似乎不是问题解决者。现在构建库失败并显示消息:装饰器中不支持函数调用,但调用了“RouterModule”。
标签: angular