我创建了一个像下面这样的共享模块。我已经读过某个地方,导入订单很重要,我现在找不到该链接。在某些地方它的工作正常但在其他地方我得到错误。我想知道这些模块的顺序,以避免任何错误。
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import 'hammerjs';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { HttpClientModule } from '@angular/common/http';
import { MaterialModule } from '@angular/material';
import { FlexLayoutModule } from '@angular/flex-layout';
import { CoreModule } from './core/core.module';
// NOTE: The import order matters.
const modules = [
CommonModule,
CoreModule,
ReactiveFormsModule,
FormsModule,
HttpClientModule,
MaterialModule,
FlexLayoutModule,
];
@NgModule({
imports: modules,
exports: modules
})
export class DependenciesModule { }
答案 0 :(得分:2)
首先,我强烈建议不要在共享模块中包含应用范围的单例providers
。导入该共享模块的延迟加载模块会创建自己的服务副本。
CoreModule
(如果它包含应用范围的提供商)且HttpClientModule
不应位于SharedModule
。
另见:
您应该知道所有提供程序都添加到同一个注入器中(root或通过延迟加载创建)
当同时加载的两个导入模块列出具有相同令牌的提供者时,第二个模块的提供者"获胜"。当Angular寻找为该令牌注入服务时,它会创建并传递由第二个提供者创建的实例。
如果模块A为令牌提供服务' X'并导入模块B,该模块B还为令牌' X'提供服务,然后模块A的服务定义"胜出"。
根AppModule提供的服务优先于导入模块提供的服务。 AppModule总是赢。
另见:
配置中路线的顺序很重要,这是设计的。
路由器在匹配路由时使用第一匹配胜利策略,因此应将更具体的路由放置在不太具体的路由上方。
这也意味着如果你有两个带路由配置的模块,你应该按正确的顺序导入它们。
另见:
如果这些模块仅包含组件,指令和管道,那么您如何订购模块没有区别。它们被合并到传递模块。
另见:
答案 1 :(得分:0)
试试这样:
在你的DependenciesModule中导出所有模块并将其导入另一个模块。
MONGODB | Topology type 'unknown' initializing.
MONGODB | Server xxx.xx.147.208:2200 initializing.
MONGODB | Topology type 'unknown' changed to type 'single'.
MONGODB | Server description for xxx.xx.147.208:2200 changed from 'unknown' to 'standalone'.
MONGODB | There was a change in the members of the 'single' topology.
MONGODB | xxx.xx.147.208:2200 | xxxx_development.count | STARTED | {"count"=>"news", "query"=>{}}
MONGODB | 116.62.147.208:2200 | xxxx_development.count | FAILED | not authorized on xxxx_development to execute command { count: "news", query: {} } (13) | 0.153356s
Completed 500 Internal Server Error in 364ms