gpt4 book ai didi

javascript - 使用providedIn和forRoot时的 Angular ,循环依赖

转载 作者:行者123 更新时间:2023-12-04 10:15:13 25 4
gpt4 key购买 nike

我正在开发一个 Angular 库。它有一个内部服务。定义如下。
二手 providedIn可以摇树。并且没有使用 providedIn:'root'因为它是内部的并且只在模块范围内使用。

@Injectable({
providedIn: MyChartModule,
})
export class LineChartLibService {

当我想添加 forRoot在模块定义中只有一个实例在延迟加载中,它遇到循环依赖。
export class MyChartModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: MyChartModule,
providers: [LineChartLibService],
};
}
}

在这种情况下我们应该怎么做?
是否可以在库中提供延迟加载的可摇树服务?
WARNING: Circular dependency: dist\my-chart\esm2015\lib\my-chart.module.js -> dist\my-chart\esm2015\lib\line-chart\line-chart.component.js 
-> dist\my-chart\esm2015\lib\line-chart-lib.service.js -> dist\my-chart\esm2015\lib\my-chart.module.js

最佳答案

我之前回答了一个(非重复的)问题,该问题为您提供了这种方法的替代方案。

https://stackoverflow.com/a/60377431/5367916

采取这个设置:

我的模块.ts

declarations: [
MyComponent
]

我的服务.ts
@Injectable({ providedIn: MyModule })

我的组件.ts
constructor(private myService: MyService) {}
  • 我的服务导入我的模块
  • 我的模块导入我的组件
  • 我的组件导入我的服务

  • 存在循环依赖。

    一种解决方法

    解决方法是创建一个服务模块并将其导入到您的模块中。

    我的模块.ts
    imports: [
    MyModuleServices
    ],
    declarations: [
    MyComponent
    ]

    我的模块服务.ts
    // no imports or declarations

    我的服务.ts
    @Injectable({ providedIn: MyModuleServices })

    我的组件.ts
    constructor(private myService: MyService) {}

    选择

    更直接的方法是将服务添加到模块的提供程序中。

    @NgModule({
    providers: [ MyService ]
    })
    export class MyModule {}

    关于javascript - 使用providedIn和forRoot时的 Angular ,循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61094083/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com