避免循环依赖的最佳方法是使用服务注入器。将共享的服务移到单独的共享模块中,并将其导入到需要使用它的模块中。另外,也可以通过延迟加载(lazy loading)等技术来解决此问题。
示例代码:
假设我们有两个模块:ModuleA和ModuleB,它们存在循环依赖问题。
// ModuleA.ts import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ModuleB } from './ModuleB';
@NgModule({ declarations: [/* ... /], imports: [CommonModule, ModuleB], // 循环依赖 }) export class ModuleA { / ... */ }
// ModuleB.ts import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ModuleA } from './ModuleA';
@NgModule({ declarations: [/* ... /], imports: [CommonModule, ModuleA], // 循环依赖 }) export class ModuleB { / ... */ }
创造共享模块,并将共享的服务通过服务注入器注入到模块中。
// SharedModule.ts import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SharedService } from './SharedService';
@NgModule({ declarations: [/* ... /], exports: [/ ... /], providers: [SharedService] // 将共享的服务注入到模块中 }) export class SharedModule { / ... */ }
将共享模块导入到需要使用它的其他模块中。
// ModuleA.ts import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SharedModule } from './SharedModule'; import { ModuleB } from './ModuleB';
@NgModule({ declarations: [/* ... /], imports: [CommonModule, SharedModule, ModuleB], }) export class ModuleA { / ... */ }
// ModuleB.ts import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SharedModule } from './SharedModule'; import { ModuleA } from './ModuleA';
@NgModule({ declarations: [/* ... /], imports: [CommonModule, SharedModule, ModuleA], }) export class ModuleB { / ... */ }