我目前遇到了一个懒加载模块和服务的问题,这些服务是在这个懒加载模块中提供的(providedIn
)。
我的文件夹结构如下:
app
-> featureModule1 (懒加载)
-> featureModule2 (懒加载)
-->services
--->service1.ts
我希望只能在featureModule2中使用service1.ts。因此,我包含了@Injectable。
// service.ts
@Injectable({
providedIn: featureModule2
})
export class service1 { /* some logic */ }
当我尝试路由到这个惰性加载的模块时,我会收到一个控制台错误:
// console
ERROR Error: Uncaught (in promise): ReferenceError: Cannot access 'featureModule2' before initialization
ReferenceError: Cannot access 'featureModule2' before initialization
我的当前的图片懒加载路由如下:
// app-routing.module.ts
const routes: Routes = [
{path: '', redirectTo: '', pathMatch: 'full'},
{ path: 'feature1', loadChildren: () => import('./feature1/feature1.module').then(m => m.featureModule1) },
{ path: 'feature2', loadChildren: () => import('./feature2/feature2.module').then(m => m.featureModule2) }
];
我尝试在模块中提供它:
// featureModule1
@NgModule({
declarations: [
featureComponent
],
imports: [
...
],
providers: [
service1
]
})
那行不通。
我试图在组件 (featureComponent
) 中直接导入 service1.ts
。
// featureComponent
import { service1 } from '../featureModule2/services/service1.service';
@Component({
...
})
export class featureComponent {
constructor(private service1: service1) { }
ngOnInit(): void {
this.service1.init();
}
}
这种方法导致了相同的错误信息。
目前唯一解决此问题的方法是创建一个“包装器”模块,该模块引入所有其他带有 @Injectable
服务的模块。
是否有不同的解决方法?每个模块中的服务不应该被注入到 root
或 any
中,因为它们只应在每个 featureModule 中可用。