为什么我的导入在某些模块中有效,但在其他模块中却抛出:错误:来自 BrowserModule 的提供程序已被加载

问题描述 投票:0回答:1

我的应用程序分为几个模块:AppModule、CoreModule、RecordModule。

我的AppModule的导入是:

AppRoutingModule,
CoreModule,
RecordModule

所以,我的其他模块以及应用程序的路由。 CoreModule 的导入是:

CommonModule,
MatButtonModule,
MatIconModule,
MatOrientedNavModule,
MatSidenavModule,
MatTabsModule,
RouterModule

它包含

<router-outlet>
,因此是 RouterModule,它包含一个异步管道,这是 CommonModule 所必需的,并且它使用几个材料组件及其各自的模块导入。 MatOrientedNavModule 是来自库的自定义模块。它的进口是:

MatButtonModule,
MatRippleModule,
MatTabsModule

也只是一堆材料成分。最后,RecordModule包含以下导入:

RecordRoutingModule

所以,只是它自己的路由,然后将其导入到 AppModule 中。

现在,我有另一个自定义库模块,MatLoadingScreenModule,它具有以下导入:

BrowserAnimationsModule,
MatBackdropModule,
MatProgressSpinnerModule

如果我在 AppModule 或 CoreModule 中导入

MatLoadingScreenModule
并将其
<mat-loading-screen>
组件添加到相应的 HTML 模板中,它就会起作用,并且我可以看到我已经实现的加载屏幕。 但是,我必须在我的 RecordComponent 中使用它,但是如果我将它导入其中,我会收到运行时错误:

错误:来自

BrowserModule
的提供程序已加载。如果您需要访问常见指令(例如 NgIf 和 NgFor),请导入
CommonModule

很尴尬的是,没有模块导入 BrowserModule,但我猜它是 BrowserAnimationsModule 的一部分?我读过您应该只在 AppModule 中导入 BrowserAnimationsModule,但是为什么它在 CoreModule 中工作呢?我能看到的唯一区别是 CoreModule 的组件

wb-sidenav
直接添加到我的 AppComponent 的模板中,而 RecordComponents 是通过路由插入的。但话又说回来,我不明白为什么这会对模块导入产生任何影响。

这是怎么回事?我该如何解决这个问题?如何导入 MatLoadingScreenModule 以在我的 RecordModule 中使用它?

angular module angular-module
1个回答
0
投票

BrowserAnimationsModule
也在拉
BrowserModule

您应该从此模块中删除该导入。

BrowserAnimationsModule
只能在根模块中导入。

© www.soinside.com 2019 - 2024. All rights reserved.