如文档所述,我使用多个environment
文件对应用程序启动进行参数化。
environment.prod.ts
:
export const environment = {
production: true,
module: ProductionModule,
baseUrl: ...
}
environment.ts
:
export const environment = {
production: false,
module: DevelopmentModule
}
在ProductionModule
内部,我想从environment
模块中“获取”远程API URL。
@NgModule({
declarations: [],
imports: [
LoggerModule.forRoot({ level: NgxLoggerLevel.ERROR })
],
providers: [
...
{ provide: API_BASE_URL, useValue: environment.baseUrl }
]
})
export class ProductionModule {}
但是这会产生Circular dependency
错误。
解决这个问题的正确方法是什么?
答案 0 :(得分:2)
您无需使用providers
或模块就可以从environment
获取任何信息。
只需在代码中实际需要的地方导入environment.baseUrl
。
import { environment } from '../../environments/environment';
只需代码
environment.baseUrl
这将使您免于循环依赖(在您的情况下,这不是普遍的意思),看到环境文件中的任何模块对我来说都是一种代码味道。
答案 1 :(得分:0)
这是您的代码中发生的情况(=>
表示依赖):
environment.ts/environment.prod.ts =>
DevelopmentModule/ProductionModule =>
environment.ts/environment.prod.ts (because, in providers array, you are using environments
因此,正如您在上面看到的那样,它是如何产生循环依赖的。
正确的方法取决于您,您要如何实现。
一种方法是,如果您不在任何地方使用module
,请从environments
中删除var acc = document.getElementsByClassName("accordion");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.display === "block") {
panel.style.display = "none";
} else {
panel.style.display = "block";
}
});
}
条目。
答案 2 :(得分:0)
在该服务导入环境中使用ApiProvider服务。创建您的项目中与后端API相关的功能。并在项目中的任何地方使用此ApiProvider服务。